鼠标的 *** 作方式
用汇编语言对鼠标的各项 *** 作进行描述的,也可以用C++、C++等其他语言来描述。
1. 初始化鼠标驱动程序:
例如:中断号INT33h 功能16h 子功能17h
中断号:用于请求服务
功能号:用于确定用户期望获取哪种服务
子功能号:进一步指定所希望的服务
调用寄存器:设置被调用的服务功能所要求的参数
返回寄存器:返回服务功能执行结果
调用的进程:设置参数 中断号INT33h 功能15h BX寄存器 ES:DX 功能16h 功能17h ES:DX
2. 显示或隐藏鼠标光标
中断33h的功能1和2分别置鼠标光标为“打开”和“关闭”。而鼠标驱动程序一直跟踪鼠标的移动,当鼠标移动时就更新它在屏幕的位置。
鼠标的程序从开始通常在打开光标,一直到程序结束。
鼠标驱动程序采用光标标记,用做显示和隐藏光标的分层方法。初次打开光标标记设为-1;功能1将标记加至0,使光标出现。功能2将标记减1,当标记为负值时就隐藏光标。
3. 设置文本鼠标光标的形状
在以视频文本模式工作时,鼠标驱动程序生成两类光标:
(1)硬件光标,由视频硬件所产生的常规屏幕光标,由水平扫描线组成。
(2)软件或属性光标,这种情况下,鼠标驱动程序在光标出现的屏幕位置写数据。驱动程序在改变此位置显示的字符或改变字符属性,使它闪烁、背景色等。
(3)中断33h的功能Ah设置文本光标的类型:AX存放功能号;BX存放应光标或软件光标选择;CX存放起始扫描线;DX存放终止扫描线。
4. 设置图形鼠标光标的形状
中断33h的功能9h设置图形模式下的鼠标光标的形状,并定义光标里的一个点为热点。光标由16 x 16位的视频掩码和16 x 16位的光标掩码组成。
5. 取得或设置鼠标光标的位置
中断33h的功能4h用于设置鼠标光标位置,功能3h则用于报告光标的位置。AX存放功能号,CX被赋予X坐标,DX被赋予Y坐标。P200例7-4
6. 将鼠标光标限定在屏幕的一部分
将鼠标光标可以限制在屏幕的一个矩形区域内,由中断33h的功能7h设置鼠标光标移动的水平范围,8h设置垂直范围。P201例7-5
7. 定义不显示鼠标光标的屏幕区域
中断33h的功能10h定义屏幕的一个区域,当鼠标进入该区域时会自动关掉。进入时,CX存放被保护域的左列号,SI存放右列号;DX存放首行号,DI存放末行号。
例7-6 设置一个范围是从第10~50列和5~30行之间的矩形域。
MOV AX , 10h ;功能号
MOV CX , 10 ;左列
MOV S I , 50 ;右列
MOV DX , 5 ;首行
MOV D I , 30 ;末行
INT 33h ;调用中断设置域
8. 跟踪鼠标的移动
中断33h 功能Bh报告自从上次调用该功能后,鼠标移动的实际距离(测量单位为米基)。该功能在CX中返回相对的水平位移;DX中返回相对的垂直位移。例7-7 查询鼠标光标的相对位移。
MOV AX , 0Bh
INT 33h
MOV HORZ_MOTION , CX
MOV VERT_MOTION , DX
9. 设置鼠标与光标移动的比率
程序可以改变鼠标移动相对于鼠标光标移动的比率。大多数鼠标的分辨率为每英寸200米基。在一定方向上移动一定数目的米基,转换为鼠标光标移动一个像素。默认情况8米基使水平移动一个像素;16米基使光标垂直移动一个像素。
中断21h的功能Fh可以改变米基 – 像素的比例。
中断33h的功能13h是改变产生双倍速率的这个阀值,默认值为64米基/秒。P202例7-8
10. 监视鼠标按钮
中断33h的功能5h和6h报告鼠标按钮的信息。这两项功能都在AX返回一个按钮状态字节,报告按钮2个或3个当前状态。此状态字节由中断21h的功能3h返回。它报告鼠标光标的位置。
中断33h的功能5h和6h跟踪按下按钮和释放按钮。
11.截取单击、双击和拖动事件
许多使用鼠标的程序都要检测鼠标的单击和双击,并跟踪按钮按下的拖动事件。
12. 建立鼠标中断例程
在INT 33h的功能Ch建立列程。入口时,ES:DX指向列程CX中存放一个位模式,设定几种应当调用的例程事件。其模式为:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)