
用C语言在Linux下获取鼠标光标的相对位置代码分享:
#include <stdioh>
#include <stdlibh>
#include <linux/inputh>
#include <fcntlh>
#include <sys/timeh>
#include <sys/typesh>
#include <sys/stath>
#include <unistdh>
int main(int argc,char argv)
{
int fd, retval;
char buf[6];
fd_set readfds;
struct timeval tv;
//fd = open("/dev/input/mice", O_RDONLY);
if(( fd = open("/dev/input/mice", O_RDONLY))<0)
{
printf("Failed to open \"/dev/input/mice\"\n");
exit(1);
}
else
{
printf("open \"/dev/input/mice\" successfuly\n");
}
while(1)
{
tvtv_sec = 5;
tvtv_usec = 0;
FD_ZERO(&readfds);
FD_SET(fd, &readfds);
EGE库
适用于win32控制台程序
#include “graphicsh” // 引用图形库
支持VC6, VC2008, VC2010, VC2012, VC2013, VC2015, VC2017, C-Free, DevCpp, Code::Blocks等等IDE
编写动画模块源程序
必须在主函数中初始化:
初始化绘图窗口 initgraph(宽,高) //宽和高的单位是像素
调用动画模块
循环结构,不断绘图/重绘;
处理鼠标/键盘事件:getch(),getkey(),getmouse()
关闭绘图窗口closegraph()
cleardevice()清屏
is_run()判断窗口是否被关闭,被关闭返回0
arc 画圆弧,边线颜色由setcolor函数设置,参数为(圆弧的圆心 x 坐标,y 坐标,起始角的角度,终止角的角度,半径)。
bar 画无边框填充矩形,颜色由setfillstyle函数设置,参数为(矩形左 x 坐标,矩形上y 坐标,右 x 坐标,下y 坐标) 。
rectangle画空心矩形。
circle 画空心圆,边线颜色由setcolor函数设置,参数为(圆心 x 坐标,圆心y 坐标,半径)
drawpoly 画多边形,边线颜色由setcolor函数决定,参数为(多边形顶点的个数,各顶点xy坐标的数组),注意该函数并不会自动连接多边形首尾
fillpoly 画填充的多边形,边线颜色根据setcolor函数,填充颜色根据setfillstyle函数,参数为(多边形顶点的个数,各顶点xy坐标的数组)
ellipse 画椭圆,边线颜色由setcolor函数决定。参数为(椭圆弧线圆心 x 坐标,圆心 y 坐标,椭圆弧线的起始角的角度,终止角的角度,椭圆弧线的 x 轴半径,y 轴半径)
fillellipse 画填充椭圆,边线颜色由setcolor函数决定,填充颜色由setfillstyle函数决定。参数为(椭圆弧线圆心 x 坐标,圆心 y 坐标,椭圆弧线的起始角的角度,终止角的角度,椭圆弧线的 x 轴半径,y 轴半径) 。
EGERGB合成颜色,参数(红色部分,绿色部分,蓝色部分)
setbkcolor 设置当前绘图背景色
setcolor 设置当前绘图前景色
setfillcolor 设置当前绘图填充色
setfont (30, 0, "华文楷体");//指定字体高度宽度
setcolor(BLACK);
outtextxy(270, 20, "演示程序");
outtextxy(100, 100, "Hello EGE Graphics");
//写文字,outtextxy不支持\t \n这类格式化用的特殊字符
//要使用特殊格式化字符请用outtextrect
outtextrect(100, 120, 200, 100, "\tHello EGE Graphics\nHere is the next line");
mousepos(&x, &y) 获取当前鼠标位置
mouse_msg保存鼠标消息的结构体:
int x;当前鼠标 x 坐标
int y;当前鼠标 y 坐标
int wheel;鼠标滚轮滚动值,一般为 120 的倍数或约数
is_move()是否鼠标移动消息
is_down()是否鼠标按键按下消息
is_up()是否鼠标按键放开消息
is_left()是否鼠标左键消息
is_mid()是否鼠标中键消息
is_right()是否鼠标右键消息
mousemsg() 检测当前是否有鼠标消息,有鼠标消息返回 1否则返回 0
getmouse()获取一个鼠标消息。如果当前鼠标消息队列中没有,就一直等待
mouse_msg msg={0};//初始化
if (mousemsg())用于检测有没有鼠标消息
msg = getmouse();
if (msgis_left()) //判断鼠标左键按下
if (msgis_right()) //判断鼠标右键按下
PIMAGE img ; //定义图像对象
img=newimage(100,50); //创建一个名为 img 的 PIMAGE 对象,尺寸为100x50
getimage(img, “/1jpg”,100, 100);//将读到图像对象,指定缩放宽度高度,0不缩放
getimage(img, 0, 0, 100, 100);
//从窗口中指定范围,抓取图像内容
putimage(200, 200, &img);
//贴图
delimage(img); //删除图像对象
功能:使用对话框让用户输入一个字符串
int inputbox_getline(LPCSTR title, LPCSTR text, LPSTR buf, int len);
title对话框标题;
text对话框内显示的提示文字,可以使用'\n'或者'\t'进行格式控制。
buf用于接收输入的字符串指针,指向一个缓冲区;
len 缓冲区的大小,限制输入最大长度;
返回值:
返回1表示输入有效,buf中的内容为用户所输入的数据,返回0表示输入无效,同时buf清空。
//这是以前写过的,没有什么问题 //有什么不明白的再问我 #include <graphicsh> #include <dosh> #include <conioh> #define BKcolor 9 /背景色/ int mousesave[18],mouse[18]; int mouseX[2],mouseY[2]; void mousecolor(int Color) {int i; for(i=0;i<18;i++) mouse[i]=Color; } void mouseon(int x,int y) /显示鼠标/ { int i; for(i=0;i<5;i++) /保存原背景/ mousesave[i]=getpixel(x+i,y); for(i=1;i<5;i++) mousesave[i+4]=getpixel(x,y+i); for(i=1;i<10;i++) mousesave[i+8]=getpixel(x+i,y+i); for(i=0;i<5;i++) /画鼠标/ putpixel(x+i,y,mouse[i]); for(i=1;i<5;i++) putpixel(x,y+i,mouse[i+4]); for(i=1;i<10;i++) putpixel(x+i,y+i,mouse[i+8]); } void mouseoff() /消失鼠标 / { int i,x,y; x=mouseX[0];y=mouseY[0]; for(i=0;i<5;i++) /画原背景/ putpixel(x+i,y,mousesave[i]); for(i=1;i<5;i++) putpixel(x,y+i,mousesave[i+4]); for(i=1;i<10;i++) putpixel(x+i,y+i,mousesave[i+8]); } void mousereset() /(可选)鼠标状态值初始化/ { _AX=0x00; geninterrupt(0x33); /0x33是DOS中断,是在DOS下通过调用中断来对鼠标进行 *** 作/ } void mousesetX(int lx,int rx) /设置鼠标左右边界 lx:左边界 gx:右边界 / { _CX=lx;_DX=rx;_AX=0x07; geninterrupt(0x33); } void mousesetY(int uy,int dy) /设置鼠标上下边界 uy:上边界dy:下边界 / { _CX=uy;_DX=dy;_AX=0x08; geninterrupt(0x33); } void mousesetXY(int x,int y) /设置鼠标当前位置 x:横向坐标y:纵向坐标 / { _CX=x;_DX=y;_AX=0x04; geninterrupt(0x33); } void mousespeed(int vx,int vy) /设置鼠标速度(缺省值:vx=8,vy=1) 值越大速度越慢 / { _CX=vx;_DX=vy;_AX=0x0f; geninterrupt(0x33); } int leftpress() /是否按下左键 返回值: 1=按下 0=释放/ { _AX=0x03; geninterrupt(0x33); return(_BX&1); } int middlepress() /是否按下中键 返回值同上 / { _AX=0x03; geninterrupt(0x33); return(_BX&4); } int rightpress() /是否按下右键 返回值同上 / { _AX=0x03; geninterrupt(0x33); return(_BX&2); } void mousegetXY(int x) /获取鼠标当前位置/ { _AX=0x03; geninterrupt(0x33); mouseX[x]=_CX; mouseY[x]=_DX; } int mousemove() /鼠标移动;/ { int i,j,x,y,color,move; x=mouseX[0]; y=mouseY[0]; move=0; /没移动标志/ mousegetXY(0); if(mouseX[0]!=x||mouseY[0]!=y) move=1; /有移动/ mouseX[0]=x; mouseY[0]=y; return move; } void main() {int gdrive=DETECT,gmode; initgraph(&gdrive,&gmode,""); setbkcolor(BKcolor); /填背景色/ mousesetY(0,getmaxy()); /设置鼠标纵轴移动范围/ mousesetX(0,getmaxx()); /设置鼠标横轴移动范围/ mousesetXY(319,239); /初始鼠标位置/ mousecolor(15); while(!kbhit()) { if(mousemove()) /mousemove() 鼠标移动;/ { mouseoff(); /消失鼠标 / mousegetXY(0); /获取鼠标当前位置/ mouseon(mouseX[0],mouseY[0]); /显示鼠标/ } } getch(); closegraph(); }
VBA讲的是逻辑,那么从逻辑上来说
单元格的位置可以作为坐标来反馈,故可以使用Cells(SelectionRow, SelectionColumn)来确定当前光标所处的坐标,但这仅仅局限于一个单元格,cells(r,c)分别为行号和列号,通过坐标来判断光标所处位置。同样的,如果用cells(r,c+1)则可以 *** 作光标所处单元格的右数1个单元格的属性,并且在 *** 作右侧单元格时光标依然在当前的单元格上,所以如果下一条命令是cells(r+1,c)则可 *** 作下方相邻单元格,举个例子就是如果cells(r,c)是A1,cells(r,c+1)就是B1,cells(r+1,c)是A2
那么只要让textbox的值 = Cells(SelectionRow, SelectionColumn)Value 即=cells(r,c)的值,就可以让textbox显示出当前光标所处单元格的值。也就是无论你光标移动到哪里,窗体都能显示出光标所处的单元格的值
最后,你提到的“右击”,VBA无法判断左击还是右击,但无论你怎么击都属于“选中 or 激活”这个 *** 作,所以 无论你左击还是右击某个单元格,Cells(SelectionRow, SelectionColumn)都能指出当前激活单元格的坐标。
第八行scanf("%f,%f,%f“,&a,&b,&c);错打了一个全角的“,应该改为半角的"第十一行和十四行2a两个字符应该改为(2a)中间加乘号,两边加括号第九行的报错可能是受第八行的错误影响的if(m=0)行浮点数无法这么精确判断是否等于0,可改为if(fabs(m)#includeintdt(float);voidmain(){floata,b,c,d;printf("输入a,b,c的值:\n");scanf("%f,%f,%f",&a,&b,&c);d=bb-4ac;if(dt(d)==0)printf("x1=%f,x2=%f\n",(b+sqrt(d))/(2a),(-b-sqrt(d))/(2a));elseif(dt(d)==1)printf("x=%f\n",-b/(2a));elseif(dt(d)==2)printf("此方程无解!\n");}intdt(floatm){if(m>0)return0;elseif(fabs(m)<00001)return1;elseif(m<0)return2;}
以上就是关于我怎样才能得到绝对鼠标位置在Linux下用C全部的内容,包括:我怎样才能得到绝对鼠标位置在Linux下用C、C++ EGE 图形库 不完全整理、C语言鼠标编程的问题,高手指教~~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)