
楼主你好,我用的是c语言。
c语言绘制鼠标的一般步骤是
1寄存器中断,得到鼠标的位置
2在改位置画上鼠标
3后继处理
4重复上面步骤
那么,在画鼠标的方式上,又有3种不同的方法(就我知道的)
1直接画线法(参考文献)
>
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
谁有c语言的鼠标 *** 作函数集,越多越好
解析:
我给你个程序,里面涉及到鼠标 *** 作,具体你可以下载《DOS编程大全》这本书,有关于鼠标的。
还不懂,加我QQ(先声明我也是菜鸟):。注明:C语言
#include<dosh>
#include<graphicsh>
#include<conioh>
#include<stdioh>
union REGS regs;
int X__max,Y__max,x_max,y_max;
void Initgr(void) /屏幕初始化成图形模式/
{
int w,h,grdriver=DETECT,grmode;
registerbgidriver(EGAVGA_driver);
initgraph(&grdriver,&grmode,"");/在双引号中可加你tc放的路径,但要在tc里有EGAVGABGI这个来初始图形/
if(graphresult())/若调用不成功,退出/
{printf("\n 调用失败!\n");
exit(1);
}
X__max=getmaxx();/求横向象点坐标数/
Y__max=getmaxy();/求纵向象点坐标数/
getaspectratio(&w,&h);/求纵横比/
x_max=1000; /设置屏幕坐标的宽度/
y_max=x_max(float)Y__maxh/((float)X__maxw);
}
int Msinit(int Xlo,int Xhi,int Ylo,int Yhi)/鼠标初始化/
{int retcode;
regsxax=0;/初始化鼠标/
int86(0x33,®s,®s);
retcode=regsxax;
if(retcode==0) return 0;
regsxax=7;/设置鼠标X方向的移动范围/
regsxcx=Xlo;
regsxdx=Xhi;
int86(0x33,®s,®s);
regsxax=8;/设置鼠标Y方向的移动范围/
regsxcx=Ylo;
regsxdx=Yhi;
int86(0x33,®s,®s);
regsxax=15;/设置mickey与象素的比,这各会影响鼠标移动速度/
regsxcx=(int)(x_max/X__max);
regsxdx=(int)(y_max/Y__max);
int86(0x33,®s,®s);
return retcode;
}
int Msread(int px,int py,int pbuttons)/读鼠标位置及状态/
{static int x0=320,y0=240,but0=0;
int xnew,ynew,ch;
do{
if(kbhit()){
ch=getch();
if(ch==13){
pbuttons=1;
return -1;
}
else return ch; /返回键盘输入/
}
regsxax=3; /调用功能3,读鼠标位置及状态/
int86(0x33,®s,®s);
xnew=regsxcx;/返回鼠标当前的位置的X坐标/
ynew=regsxdx;/返回鼠标当前的位置的Y坐标/
pbuttons=regsxbx;/返回鼠标当前的状态/
}while(xnew==x0&&ynew==y0&&pbuttons==but0);
/当鼠标状态改变或位置改变终止循环/
but0=pbuttons;/将鼠标状态保存到静态变量中/
x0=xnew;y0=ynew;/将鼠标位置保存到静态变量中/
px=xnew;py=(int)(y_max-ynew);
return -1;
}
int Xpixel(int x)/由象素坐标变换为屏幕坐标/
{ return (int)((long)X__maxx/x_max);}
int Ypixel(int y)
{ return Y__max-(int)((long)Y__maxy/y_max);}
void Cursor(int x,int y) /显示十字光标/
{int X=Xpixel(x),Y=Ypixel(y),color;
char str=" \0";
line(X-8,Y,X-3,Y);
line(X,Y-8,X,Y-4);
line(X+3,Y,X+8,Y);
line(X,Y+4,X,Y+8);
color=getcolor();
setcolor(BLACK);
outtextxy(X__max-100,10,str);/删除前次显示值/
sprintf(str,"%d,%d",x,y);
setcolor(WHITE);
outtextxy(X__max-100,10,str);/在屏幕右上角显示当前光标的坐标/
setcolor(color);
}
main()
{int buttons,X,Y,x,y,a,b;
char i;
Initgr();/初始化图形屏幕/
setcolor(EGA_LIGHTRED);/设置屏幕前景色/
line(1,1,X__max-1,1); /在屏幕四周画一矩形/
line(1,1,1,Y__max-1);
line(X__max-1,1,X__max-1,Y__max-1);
line(1,Y__max-1,X__max-1,Y__max-1);
setcolor(EGA_WHITE);
printf("\n 按鼠标右键终止程序\n");
printf(" 然后按任意键退出");
seritemode(XOR_PUT);/设置屏幕输出模式/
Msinit(0,(int)x_max,0,(int)y_max);/初始化鼠标/
a=x_max;b=y_max;
x=0;
Cursor(a,b); /在a=x_max;b=y_max;处画指针/
while(x!=2)
{Msread(&X,&Y,&x);
Cursor(a,b); /删除之前的鼠标,因为屏幕输出模式的关系/
if(x==1){
a=(int)(X10/x_maxX__max);b=(int)((y_max-Y)10/y_maxY__max);
circle(a,b,1); } /画点/
Cursor(X,Y);
a=X;b=Y;
}
Cursor(X,Y);/再调用一次把原来的指针削掉/
getch();
closegraph();
}
我猜你说的纯C指的是标准C(Standard C)。如果是这样的话,我可以明确告诉你确实没有鼠标事件。
标准C库的所有头文件可以参照官方网站,里面有各头文件中包含函数功能比较详细的说明。
关于鼠标我要说一下,图形界面不是计算机运行的必需模块, *** 作系统甚至可以没有鼠标驱动。上过计算机 *** 作系统课之后你应该知道,一个 *** 作系统能够跑起来,只需要有各进程调度和资源分配,并不依赖图形界面。每个进程在设计的时候可以自由选择自己需要的函数库进行封装链接(或者运行时动态链接)。比方说你写个程序只需要计算1+1,那么要图形界面模块有啥用呢?
图形用户交互界面(GUI)其实也是特殊的函数库,如果 *** 作系统支持(或者说 *** 作系统中有安装相关函数库的话),则可以在程序中包含头文件进行调用。
如果是正经学计算机的,建议先放下图形交互,放下Windows(当然我没说它不好),尝试接触下OSX以及Linux,你会有比较大的收获。
#include <cstdio>
#include<windowsh>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) 1:0)
int main()
{
while(1)
{
printf("鼠标左键是否按下:");
if(KEY_DOWN(VK_LBUTTON))printf("是");
else printf("否");
printf("\n");
printf("鼠标右键是否按下:");
if(KEY_DOWN(VK_RBUTTON))printf("是");
else printf("否");
printf("\n");
Sleep(2000);
}
return 0;
}
以上就是关于用C语言或C++ 实现鼠标画图,并可以定位鼠标坐标全部的内容,包括:用C语言或C++ 实现鼠标画图,并可以定位鼠标坐标、C语言怎么实现鼠标 *** 作、谁有c语言的鼠标 *** 作函数集等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)