歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年3月17日 星期一

DOS下,如何使用滑鼠

C語言廣泛的被運用在很多低階的開發,如今的OS幾乎都已經進入到[視窗環境]了,Console Mode已經算是式微的東西了.但是你知道嗎?這些式微的東西,竟是這些視窗環境,線上遊戲...的幕後功臣.因為一些機緣,今天有機會再把這些東西拿出來看看,也分享給有興趣的人...

我想沒有滑鼠的話,我想很多人都沒辦法操作Windows吧.
在Dos模式中,你要怎麼去使用它呢?

在C語言中,你必須先Include這個<dos.h>
像是這樣 #include <dos.h >
然後就可以使用這個函數 int86()
函數原型:int int86(int intno, union REGS *inregs , union REGS *outregs)
滑鼠的中斷位置是""0x33"
以下有些範例提供參考:
宣告廣域(Global)變數
union REGS i,o;
(1)確認驅動程式是否載入
int SubCheckMouseLoadedStatus(){
   clrscr();
   i.x.ax=0;
   int86(0x33,&i,&o);
   if(o.x.ax == _NORMAL) //Not Loaded
   {
      printf("No Mouse Available...Please Check it!");
      return(_ERROR);
   }else{ //Loaded
      return(_NORMAL);
   }
}
#基本上進入Windows都會載入滑鼠驅動程式,如果真的要在純DOS下開發的話,可能需要自行至你的滑鼠官方晚站下載驅動程式
(2)顯示滑鼠游標
void SubEnableMousePointer()
{
   i.x.ax=1; //Enable = 1
   int86(0x33,&i,&o);
}
(3)隱藏滑鼠游標
void SubDisableMousePointer()
{
   i.x.ax=2; //Disable = 2
   int86(0x33,&i,&o);
}
(4)顯示滑鼠座標
.......
i.x.ax = 3;
int86(0x33,&i,&o);
while(!kbhit())
{
   SubDisplayMousePosition(o.x.cx,o.x.dx);
......
}

void SubDisplayMousePosition(int x,int y)
{
   gotoxy(62,23); //到螢幕某顯示資訊
   textcolor(15); //設定Text Color
   cprintf("x:%2d y:%2d ",1+x/8,1+y/8); //除以8 可得Text Mode的座摽
}
螢幕的原點是位於左上角(1,1)
(5)抓取使用中滑鼠按鍵
......
SubDisplayMouseButtonStatus(o.x.bx);
......

void SubDisplayMouseButtonStatus(int s)
{
   textcolor(15);
   gotoxy(72,23);
   if(s == 0)//沒有任何鍵被按下
   {
      cprintf("L:%c R:%c",176,176);
   }else if(s==1){ //左鍵按下
      cprintf("L:%c R:%c",219,176);
   }else if(s==2){ //右鍵按下
      cprintf("L:%c R:%c",176,219);
   }else if(s==3){ //左右鍵同時按下
      cprintf("L:%c R:%c",219,219);
   }else{
      cprintf("L:%c R:%c",176,176);
   }
   textcolor(current_color);
}

參考文件:
Mouse Programming

0 個回應:

MSN狀態(我在線上時,可以跟我交談喔)