鼠标的 *** 作方式

鼠标的 *** 作方式,第1张

鼠标的 *** 作方式

用汇编语言对鼠标的各项 *** 作进行描述的,也可以用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返回。它报告鼠标光标的位置。

鼠标的 *** 作方式,第2张
中断33h的功能5h和6h跟踪按下按钮和释放按钮。

11.截取单击、双击和拖动事件
许多使用鼠标的程序都要检测鼠标的单击和双击,并跟踪按钮按下的拖动事件。

12.   建立鼠标中断例程
在INT  33h的功能Ch建立列程。入口时,ES:DX指向列程CX中存放一个位模式,设定几种应当调用的例程事件。其模式为:

鼠标的 *** 作方式,第3张

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2431283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-02
下一篇 2022-08-02

发表评论

登录后才能评论

评论列表(0条)

保存