资源描述:
《鼠标趣味编程一例》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、鼠标趣味编程一例 在用户自己的图形环境下应用鼠标,不但使软件界面非常友好、便于操作,而且也是一件非常有趣的事情。 当然,你可以设计自己的鼠标驱动程序,不过那要更专业、更麻烦一些。本文主要是利用已有的鼠标驱动程序,通过0x33H号中断调用来编写一个有趣的程序。 关于0x33H号鼠标中断调用中,各子功能所实现的功能,您可以查阅相关的书籍。现仅把本程序中所用到的几个功能号说明如下:功能号实现的功能00h复位光标01h显示光标02h隐藏光标03h查询光标状态07h设置光标水平移动区域08h设置光标垂直移动区域 在C语言中,鼠标中断调用是通过函数in
2、t86(num,in_regs,out_regs)来实现的。其中:num是中断调用号,in_regs是中断调用时的输入值,out_regs是中断结束后的返回值。具体的函数调用方法,您可以查阅手册,也可以参考本程序中的用法。 本程序运行后,屏幕被划分成两个窗口:一个是鼠标窗口,另一个是状态窗口。移动鼠标或按键,相应的鼠标位置和按键状态在状态窗口中给出。本程序在TurboC2.0环境下调试通过。 #include〈graphics.h〉 #include〈alloc.h〉 #include〈stdlib.h〉 #include〈string.
3、h〉 #include〈stdio.h〉 #include〈time.h〉 #include〈dos.h〉 #defineDZH16 intmain() {intgd=DETECT,gm; structviewporttypevpbase,vptitle,vpgraph; intx,y,x_cur,y_cur; intlpx,lpy,rpx,rpy; unionREGSmregs; unsignedcharstr[]=“Mouseposition:",message[80]; unsignedcharlfold,rhold,
4、lf[]=“R",rh[]=“R"; registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,“");/*初始化图形环境*/ getviewsettings(&vpbase);/*设置窗口系统*/ rectangle(vpbase.left,vpbase.top,vpbase.right,vpbase.bottom); line(vpbase.left,vpbase.top+DZH+2,vpbase.right,vpbase.top+DZH+2); setviewport(vpbase.l
5、eft+1,vpbase.top+1,vpbase.right-1,vpbase.top+DZH+1,vpbase.clip); getviewsettings(&vptitle); setviewport(vptitle.left,vptitle.bottom+2,vptitle.right,vpbase.bottom-1,vptitle.clip); getviewsettings(&vpgraph); setviewport(vptitle.left,vptitle.top,vptitle.right,vptitle.bottom,v
6、ptitle.clip); settextjustifyCENTER_TEXTCENTER_TEXT); x=(vptitle.right-vptitle.left)/2+1; y=(vptitle.bottom-vptitle.top)/2+1; mregs.x.ax=0;/*复位鼠标*/ int86(0x33,&mregs,&mregs); mregs.x.ax=7;/*设置水平方向光标的移动范围*/ mregs.x.cx=vpgraph.left; mregs.x.dx=vpgraph.right; int86(0x33,&
7、mregs,&mregs); mregs.x.ax=8;/*设置垂直方向光标的移动范围*/ mregs.x.cx=vpgraph.top; mregs.x.dx=vpgraph.bottom; int86(0x33,&mregs,&mregs); mregs.x.ax=1;/*显示光标*/ int86(0x33,&mregs,&mregs); mregs.x.ax=3;/*读光标状态*/ int86(0x33,&mregs,&mregs); x_cur=mregs.x.cx; y_cur=mregs.x.dx; switch(
8、mregs.x.bx)/*检查按键状态*/ {case0: lfold=lf[0]='xDF'; rhold=rh