C語言鼠標操作方法及源碼_第1頁
C語言鼠標操作方法及源碼_第2頁
C語言鼠標操作方法及源碼_第3頁
C語言鼠標操作方法及源碼_第4頁
C語言鼠標操作方法及源碼_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C 語言鼠標操作方法及源碼( 轉載 )鼠標的操作是使用dos中斷功能,中斷號:33h 下面給幾個操作鼠標的示例,后面有更詳細的中斷功能說明及代碼。顯示鼠標:union REGS regs;regs.x.ax=1;int86(0 x33,®s,®s); 檢查是否被按下: union REGS regs;regs.x.ax=6;int86(0 x33,®s,®s);返回值在bx寄存器中;在實際編程中一般要使用循環不斷的檢驗是否被按下!檢驗鼠標位置:u nion REGS regs;regs.x.ax=3;int86(0 x33,®s,®s);返回值:x坐標在re

2、gs.h.cxy 坐標在 regs.h.dx/*下面是各值對鼠標的設置功能*/、功能 00H功能描述: 初始化鼠標,該操作只需要執行一次入口參數:AX=00H出口參數:AX=0000H不支持鼠標功能,FFFFH支持鼠標功能BX=鼠標按鈕個數(在支持鼠標功能時) 在支持鼠標功能的情況下,鼠標還被設置如下參數:、 鼠標指針放在屏幕中央、 如果當前鼠標指針是顯示的,則操作后,鼠標指針被隱藏、 鼠標指針的顯示頁為 0 、 根據屏幕的顯示模式顯示鼠標指針:文本 反向顯示矩形塊,圖形 尖頭形狀、水平象素比=8:8,垂直象素比= 16:8、 設置水平和垂直的顯示邊界為當前顯示模式的最大邊界、 允許光筆仿真8

3、、 雙速門檻值=64、功能 01H功能描述:顯示鼠標指針,通常在鼠標初始化后,用此功能顯示其指針 入口參數: AX=01H出口參數: 無、功能 02H功能描述: 隱藏鼠標指針,一般在程序結束時,調用此功能入口參數: AX= 02H出口參數: 無、功能 03H功能描述: 讀取鼠標位置及其按鈕狀態入口參數:AX=03H出口參數:BX =按鍵狀態:位0=1 按下左鍵位 1=1 按下右鍵位 2=1 按下中鍵 其它位 保留,內部使用CX =水平位置DX =垂直位置、功能 04H功能描述: 設置鼠標指針位置入口參數:AX=04H, CX=水平位置,DX =垂直位置出口參數: 無、功能 05H功能描述: 讀

4、取鼠標按鍵信息入口參數:AX=05H, BX=指定的按鍵:0左鍵,1右鍵,2 中鍵出口參數:人乂 =按鍵狀態,參見功能3H中BX的說明BX=按鍵次數CX=水平位置(最后按鍵時)。乂=垂直位置(最后按鍵時)、功能 06H功能描述: 讀取鼠標按鈕釋放信息入口參數:AX=06H, BX=指定的按鍵:0左鍵,1右鍵,2 中鍵出口參數:人乂 =按鍵狀態,參見功能3H中BX的說明BX二釋放的次數CX=水平位置(最后釋放時)。乂 =垂直位置(最后釋放時)(8)、功能07H功能描述: 設置鼠標水平邊界入口參數:AX=07HCX=最小水平位置DX =最大水平位置出口參數: 無,鼠標有可能因新區域變小而自動移進新

5、區域內、功能 08H功能描述: 設置鼠標垂直邊界入口參數:AX=08Hcx=最小垂直位置DX =最大垂直位置出口參數: 無,鼠標有可能因新區域變小而自動移進新區域內、功能 09H功能描述: 設置圖形鼠標形狀入口參數:AX=09HBX=指針的水平位置。乂=指針的垂直位置ES:DX=16X16位光標的映象地址 參數說明:(BX,CX)是鼠標的指針在16X16點陣中的位置, (0,0)是左上角;ES:DX指向的存儲單元內存放16X16點陣的位映象隱碼,緊跟其后的是16X16點陣的光 標掩碼。“ ” 鼠標指針的顯示方法: 位映象隱碼 邏輯與 上屏幕顯示區的內容,然后再用光標 掩碼內“ ” 容 異或 前

6、面運算的結果。出口參數: 無(11)、功能 0AH功能描述: 設置本文鼠標形狀入口參數:AX=OAHBX=光標類型:0 CX和DX 的各位含義如下:位70 鼠標指針符號位 108 字符前景色位 11 亮度位 1412 字符背景色位 15 閃爍1 CX=光標的起始掃描線DX =光標的結束掃描線出口參數: 無(12)、功能 0BH功能描述: 讀取鼠標移動計數入口參數:AX=0BH出口參數:CX=水平移動距離:正數向右移,負數 向左移DX=垂直移動距離:正數向下移,負數 向上移、功能 0CH功能描述: 為鼠標事件設置處理程序入口參數:AX=0CHCX =中斷掩碼 位0=1 鼠標指針位置發送變化位1

7、= 1 按下左按鈕位 2= 1 釋放左按鈕位 3=1 按下右按鈕位 4=1 釋放右按鈕位 5=1 按下中間按鈕位 6=1 釋放中間按鈕位 715= 0 保留ES:DX =中斷處理程序的地址在進入中斷處理程序時,有關寄存器的值含義:AX =中斷掩碼BX =按鍵狀態CX =鼠標指針的水平位置DX =鼠標指針的垂直位置SI =水平位置的變化量DI =垂直位置的變化量出口參數: 無、功能 0DH功能描述: 允許光筆仿真入口參數: AX= 0DH出口參數: 無(15)、功能 0EH功能描述: 關閉光筆仿真入口參數:AX=OEH出口參數: 無(16)、功能 0FH功能描述: 設置鼠標計數與象素比入口參數:

8、AX=OFHCX =水平比例DX =垂直比例出口參數:無(17)、功能 10H功能描述:設置鼠標指針隱藏區域入口參數:AX = 10HCX=左上角X坐標DX =左上角Y坐標SI=右下角X坐標DI=右下角Y坐標出口參數:無、功能 13H功能描述: 設置倍速的閾值,其缺省值為 64 入口參數:AX = 13HDX =閥值 出口參數: 無、功能 14H功能描述: 替換鼠標事件中斷入口參數:AX = 14HCX =中斷掩碼ES:DX =中斷處理程序的地址 出口參數:CX=舊的中斷掩碼ES:DX =舊的中斷處理程序地址、功能 15H功能描述: 讀取鼠標驅動器狀態的緩沖區大小 入口參數:AX = 15H

9、出口參數:BX=存放鼠標驅動器狀態所需緩沖區的大小、功能 16H功能描述: 存儲鼠標驅動器狀態入口參數:AX = 16HES:DX =存儲鼠標驅動器狀態的地址 出口參數:無(22)、功能17H 功能描述: 重裝鼠標驅動器狀態入口參數:AX = 17HES:DX =鼠標驅動器狀態的地址 出口參數: 無(23)、功能 18H功能描述: 為鼠標事件設置可選的處理程序入口參數:AX = 18HCX =替換中斷掩碼ES:DX=替換中斷處理程序的地址CF=O出口參數: 無、功能 19H功能描述: 讀取替換處理程序的地址入口參數:AX = 19HCX =替換中斷掩碼出口參數:若AX = -1不成功,否則,E

10、S:DX =中斷處理程序的地址、功能 1AH功能描述: 設置鼠標的靈敏度,其取值1100入口參數:AX = 1AHBX=水平靈敏度(每8個象素鼠標需要移動的數量,一般為8)CX=垂直靈敏度(每8個象素鼠標需要移動的數量,一般為16) DX =倍速閥值出口參數: 無、功能 1BH功能描述: 讀取鼠標的靈敏度入口參數:AX = 1BH出口參數:BX =水平靈敏度cx=垂直靈敏度DX =倍速閥值、功能 1CH功能描述:設置鼠標中斷速率入口參數:AX = 1CHBX=每秒鐘中斷的次數:0關中斷,130/S, 250/S, 3100/S, 4200/S 出口參數: 無、功能 1DH功能描述: 為鼠標指針

11、選擇顯示頁入口參數:AX = 1DHBX =顯示頁出口參數: 無、功能 1EH功能描述: 讀取鼠標指針的顯示頁入口參數:AX = 1EH出口參數:BX =顯示頁、功能 1FH功能描述: 禁止鼠標驅動程序入口參數:AX = 1FH出口參數:若AX = -1不成功,否則,ES:BX =鼠標驅動程序的地址、功能 20H功能描述: 啟動鼠標驅動程序入口參數:AX=20H出口參數: 無(32)、功能 21H功能描述: 鼠標驅動程序復位入口參數:AX=21H出口參數:若AX = -1不成功,否則,BX=2、功能 22H功能描述: 設置鼠標驅動程序信息語言入口參數:AX=22HBX=語言代碼:0英語,1法語

12、,2荷蘭語,3德語,4瑞典語,5芬蘭語,6西 班牙語, 7葡萄牙語, 8意大利語出口參數: 無、功能 23H功能描述: 讀取語種入口參數:AX=23H出口參數:BX =語言代碼、功能 24H功能描述: 讀取鼠標信息入口參數:AX=24H出口參數:BH =主版本號,BL=輔版本號CL二中斷請求號CH=鼠標類型:1Bus Mouse, 2Serial Mouse, 3InPort Mouse, 4PS/2Mouse, 5HP Mouse、功能 25H功能描述: 讀取鼠標驅動程序信息入口參數:AX=25H出口參數:AX=鼠標驅動程序信息:位15 0:驅動程序是.SYS文件,否則,為.COM 文件位

13、140: 不完全鼠標顯示驅動程序,否則,為完全的位 13-1200: 軟件文本光標01: 硬件文本光標1X: 圖形光標、功能 26H功能描述: 讀取最大有效坐標入口參數:AX=26H出口參數:BX=鼠標驅動程序狀態CX=最大水平坐標DX =最大垂直坐標#include#include#include#include#include#include/*鼠標信息宏定義*/#define WAITING 0 xff00#define LEFTPRESS 0 xff01#define LEFTCLICK 0 xff10#define LEFTDRAG 0 xff19#define RIGHTPRESS

14、 0 xff02#define RIGHTCLICK 0 xff20#define RIGHTDRAG 0 xff2a#define MIDDLEPRESS 0 xff04#define MIDDLECLICK 0 xff40#define MIDDLEDRAG 0 xff4c#define MOUSEMOVE 0 xff08int hide1616, bury1616,mousedraw1616,pixelsave1616;/*分別定義隱碼、掩碼、點值*/int mousebutton,mouseexist,mouseX,mouseY;void mousepicture() /*畫心形,可設

15、置其它的圖形*/int i,j,k;long hidenum16=0 xe3c7,0 xc183,0 x8001,0 x0000,0 x0000,0 x0000,0 x0000,0 x8001,0 x8001,0 xc003,0 xe007,0 xf00f,0 xf81f,0 xfc3f,0 xfe7f,0 xffff, ; /*隱碼點值,是對點素進行設置*/long burynum16=0 x1c38,0 x3e7c,0 x7ffe,0 xffff,0 xffff,0 xffff,0 xffff,0 x7ffe,0 x3ffe,0 x3ffc,0 x1ff8,0 x0ff0,0 x07e0,

16、0 x03c0,0 x0180,0 x0000,;/*掩碼點值*/for(i=0;i=0;j-)hideij=hidenumi%2;hidenumi/=2; /*把隱碼轉化為 0-1*/while(burynumi!=0)for(k=15;k=0;k-)buryij=burynumi%2;burynumi/=2; for(k=0;k16;k+) if(hideik=0&buryik=0)mousedrawik=1;else if(hideik=0&buryik=1) mousedrawik=2;else if(hideik=1&buryik=0)mousedrawik=3;elsemoused

17、rawik=4; /*期間實行邏輯與和異或*/void mouseon(int x,int y) /*顯示鼠標*/int i,j;for(i=0;i16;i+)for(j=0;j16;j+)pixelsaveij=getpixel(x+j,y+i);/*取得指定像素的顏色 */if(mousedrawij=1)putpixel(x+j,y+i,6);if(mousedrawij=2) /*1、2 采用點的邏輯運算判斷進行著色*/putpixel(x+j,y+i,6);void mouseoff() /* 消失鼠標 */int i,j,x,y,color;x=mouseX;y=mouseY;fo

18、r(i=0;i16;i+)for(j=0;j16;j+)if(mousedrawij=3)|(mousedrawij=4) /*3、 4 采用點的邏輯運算 判斷可否繼續運行*/continue;putpixel(x+j,y+i,BLACK); /*使其鼠標移動前的位置變為黑色*/ putpixel(x+j,y+i,pixelsaveij);/* 使其恢復指定像素的顏色*/*鼠標是否加載MouseExist:l=加載0=未加載MouseButton:鼠標按鍵數目 */void mouseload()_AX=0 x00;geninterrupt(0 x33);mouseexist=_AX;mous

19、ebutton=_BX;/*鼠標狀態值初始化*/void mousereset()_AX=0 x00;geninterrupt(0 x33);/*0 x33是DOS中斷,是在DOS下通過調用中斷來對鼠標進行操 作.*/*改變鼠標光標形狀SHAPE sp:為以上定義的形狀void MouseShape(SHAPE sp)_BX=sp.hotx;_CX=sp.hoty;_ES=FP_SEG(&sp.shape);_DX=FP_OFF(&sp.shape);_AX=0 x09;geninterrupt(0 x33);*/*設置鼠標左右邊界lx:左邊界gx:右邊界 */void mousesetX(i

20、nt lx,int rx)_CX=lx;_DX=rx;_AX=0 x07;geninterrupt(0 x33);/*設置鼠標上下邊界uy:上邊界dy: 下邊界 */void mousesetY(int uy,int dy)_CX=uy; _DX=dy; _AX=0 x08; geninterrupt(0 x33); /*設置鼠標當前位置X:橫向坐標y: 縱向坐標 */ void mousesetXY(int X,int y) _CX=X; _DX=y; _AX=0X04; geninterrupt(0X33);/*設置鼠標速度(缺省值:vx=8,vy=l) 值越大速度越慢 */void mousespeed(int vx,int vy) _CX=vx; _DX=vy;_AX=0 x0f; geninterrupt(0 x33); /*獲取鼠標按下鍵的信息*/ /*是否按下左鍵 返回值: l=按下 0=釋放*/int leftpress() _AX=0 x03;geninterrupt(0 x33); return(_BX&l); /*是否按下中鍵返回值同上 */ int midd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論