C中捕捉鼠标事件
怎样捕捉鼠标事件呀,即点一下鼠标有一个事件要发生呀?
[解决办法]
点鼠标会有事件发生啊,在消息循环里处理
[解决办法]
WM_LBUTTONDOWN
[解决办法]
这是我做过的一个C下的鼠标函数,通过33号系统调用来获取鼠标的,具体每个值是干什么的,靠你自己找资料了,这是C,不是WINDOWS里的,所以什么都要自己做!我这个只是我做的一个程序的一部分,drawmouse函数是一个画鼠标的,你就先看看怎么用鼠标好了!
getmouse(button_ptr ptr)
{
union REGS inregs,outregs;
int nx,ny,ox,oy,lbutton;
FILE *fp;
button_ptr test;
inregs.x.ax=7; /*设置最大横向位移*/
inregs.x.cx=0;
inregs.x.dx=999;
int86(0x33,&inregs,&inregs);
inregs.x.ax=8; /*设置最大纵向位移*/
inregs.x.cx=0;
inregs.x.dx=767;
int86(0x33,&inregs,&inregs);
inregs.x.ax=3;
int86(0x33,&inregs,&outregs);
nx=outregs.x.cx;
ny=outregs.x.dx;
mouse_buffer=(char *)malloc(imagesize(nx,ny,nx+16,ny+18));
getimage(nx,ny,nx+16,ny+18,mouse_buffer);
drawmouse(nx,ny);
ox=nx;
oy=ny;
while(1)
{
inregs.x.ax=3;
int86(0x33,&inregs,&outregs);
nx=outregs.x.cx;
ny=outregs.x.dx;
lbutton=outregs.x.bx;
if(ox!=nx&&oy!=ny)
{
putimage(ox,oy,mouse_buffer,0);
getimage(nx,ny,nx+16,ny+18,mouse_buffer);
test=ptr;
drawmouse(nx,ny);
ox=nx;
oy=ny;
delay(1000);
}
if(lbutton==1)
{
test=ptr;
if((nx> =test-> top.x&&nx <=test-> move.x)&&(ny> =test-> top.y&&ny <=test-> move.y))
{
if(test-> status==0)
{
putimage(ox,oy,mouse_buffer,0);
if(strcmp(test-> word, "menu ")==0)
{
fp=fopen( "image/menu2.bmp ", "rb ");
openpic(fp,4);
fclose(fp);
}
test-> status=1;
}
else
{
putimage(ox,oy,mouse_buffer,0);
if(strcmp(test-> word, "menu ")==0)
{
fp=fopen( "image/menu.bmp ", "rb ");
openpic(fp,4);
fclose(fp);
}
test-> status=0;
}
test-> button(test);
inregs.x.ax=3;
int86(0x33,&inregs,&outregs);
nx=outregs.x.cx;
ny=outregs.x.dx;
getimage(nx,ny,nx+16,ny+18,mouse_buffer);
drawmouse(nx,ny);
ox=nx;
oy=ny;
}
while(test-> next!=NULL)
{
test=test-> next;
if((nx> =test-> top.x&&nx <=test-> move.x)&&(ny> =test-> top.y&&ny <=test-> move.y))
{
if(test-> status==0)
{
putimage(ox,oy,mouse_buffer,0);
if(strcmp(test-> word, "menu ")==0)
{
fp=fopen( "image/menu2.bmp ", "rb ");
openpic(fp,4);
fclose(fp);
}
test-> status=1;
}
else
{
putimage(ox,oy,mouse_buffer,0);
if(strcmp(test-> word, "menu ")==0)
{
fp=fopen( "image/menu.bmp ", "rb ");
openpic(fp,4);
fclose(fp);
}
test-> status=0;
}
test-> button(test);
inregs.x.ax=3;
int86(0x33,&inregs,&outregs);
nx=outregs.x.cx;
ny=outregs.x.dx;
getimage(nx,ny,nx+16,ny+18,mouse_buffer);
drawmouse(nx,ny);
ox=nx;
oy=ny;
}
}
do
{
inregs.x.ax=3;
int86(0x33,&inregs,&outregs);
nx=outregs.x.cx;
ny=outregs.x.dx;
lbutton=outregs.x.bx;
if(ox!=nx&&oy!=ny)
{
putimage(ox,oy,mouse_buffer,0);
getimage(nx,ny,nx+16,ny+18,mouse_buffer);
test=ptr;
drawmouse(nx,ny);
ox=nx;
oy=ny;
delay(1000);
}
}while(lbutton==1);
}
}
}