通过并行机制处理鼠标和键盘

王朝other·作者佚名  2008-06-01
宽屏版  字体: |||超大  

该程序通过并行机制处理鼠标和键盘的消息,为了简化程序裁减了一些代码,该程序可用为基础在该程序上添加代码可用于文本编辑,游戏和其他鼠标键盘通用的程序.

#include <graphics.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <bios.h>

union REGS regs;

unsigned size;

void far *Buffer;

int ScanKey();

void Mouse();

void Init();

int InitMouseDrive();

int main()

{

int key,x,y,cx,cy;

x=1,y=1;

Init();/*初始化图形模式*/

if(InitMouseDrive(&cx,&cy))/*安装鼠标*/

{

printf("Mouse Drive Error!");

exit(0);

}

size=imagesize(cx-2,cy-2,cx+2,cy+2);

Buffer=(void *)malloc(size);

getimage(cx-2,cy-2,cx+2,cy+2,Buffer);

do

{

if(kbhit())

{

key=ScanKey();/*得到按键结果*/

rectangle(x,y,x+5,y+5);

x+=10;

if(x>=630)

{

x=1;

y+=10;

}

}

else

Mouse(&cx,&cy);/*访问鼠标信息的到新的光标坐标*/

}while(key!=0x01);

closegraph();

}

int ScanKey()/*键盘*/

{

return(bioskey(0)>>8);

}

void Init()/*图形驱动*/

{

int graphdrive=0,graphmode=0;

initgraph(&graphdrive,&graphmode,"");

setcolor(15);

}

void Mouse(int *px,int *py)/*鼠标*/

{

int mx,my,omx,omy;

regs.x.ax=3;

int86(0x33,&regs,&regs);

omx=*px,omy=*py;

mx=regs.x.cx;

my=regs.x.dx;

if(mx!=*pxmy!=*py)/*当鼠标位置改变是重新绘制光标*/

{

*px=mx; *py=my;

putimage(omx-2,omy-2,Buffer,COPY_PUT);

free(Buffer);

size=imagesize(mx-2,my-2,mx+2,my+2);

Buffer=(void *)malloc(size);

getimage(mx-2,my-2,mx+2,my+2,Buffer);

rectangle(mx-2,my-2,mx+2,my+2);

}

}

int InitMouseDrive(int *rpx,int *rpy)/*鼠标驱动*/

{

int Found=0;

regs.x.ax=0;

int86(0x33,&regs,&regs);

Found=regs.x.ax;

regs.x.ax=7;

regs.x.cx=3;

regs.x.dx=635;

int86(0x33,&regs,&regs);

regs.x.ax=8;

regs.x.cx=3;

regs.x.dx=480;

int86(0x33,&regs,&regs);

regs.x.ax=4;

regs.x.cx=*rpx=640/2;

regs.x.dx=*rpy=480/2;

int86(0x33,&regs,&regs);

if(Found==0)

return 1;

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有