如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
鼠标趣味编程一例在用户自己的图形环境下应用鼠标,不但使软件界面非常友好、便于操作,而且也是一件非常有趣的事情。当然,你可以设计自己的鼠标驱动程序,不过那要更专业、更麻烦一些。本文主要是利用已有的鼠标驱动程序,通过0x33H号中断调用来编写一个有趣的程序。关于0x33H号鼠标中断调用中,各子功能所实现的功能,您可以查阅相关的书籍。现仅把本程序中所用到的几个功能号说明如下:功能号实现的功能00h复位光标01h显示光标02h隐藏光标03h查询光标状态07h设置光标水平移动区域08h设置光标垂直移动区域在C语言中,鼠标中断调用是通过函数int86(num,in_regs,out_regs)来实现的。其中:num是中断调用号,in_regs是中断调用时的输入值,out_regs是中断结束后的返回值。具体的函数调用方法,您可以查阅手册,也可以参考本程序中的用法。本程序运行后,屏幕被划分成两个窗口:一个是鼠标窗口,另一个是状态窗口。移动鼠标或按键,相应的鼠标位置和按键状态在状态窗口中给出。本程序在TurboC2.0环境下调试通过。#include〈graphics.h〉#include〈alloc.h〉#include〈stdlib.h〉#include〈string.h〉#include〈stdio.h〉#include〈time.h〉#include〈dos.h〉#defineDZH16intmain(){intgd=DETECT,gm;structviewporttypevpbase,vptitle,vpgraph;intx,y,x_cur,y_cur;intlpx,lpy,rpx,rpy;unionREGSmregs;unsignedcharstr[]=“Mouseposition:",message[80];unsignedcharlfold,rhold,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.left+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,vptitle.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,&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(mregs.x.bx)/*检查按键状态*/{case0:lfold=lf[0]