c语言中坐标xoy轴在哪里,用C语言在linux下获取鼠标指针的相对位置
1. 關(guān)于"/dev/input/mice"
相信很多人都用過Linux,也許你發(fā)現(xiàn)不管是在X-window下面,還是在Console下面,鼠標(biāo)都是可以操作的。那么你有沒有考慮過這些鼠標(biāo)都是從哪來的?
不錯(cuò)!他們都是從"/dev/input/mice"這個(gè)文件里來的。如果你對Linux比較熟,那么你肯定看得出來這是一個(gè)設(shè)備文件。"mice"就是Linux下面鼠標(biāo)的設(shè)備文件,不管你用的是PS2的還是USB的,所有關(guān)于鼠標(biāo)的操作都被抽象到"mice"這個(gè)文件中。
2. "mice"之母
在linux下面,她是"mousedev.c"這個(gè)文件。你可以在內(nèi)核的"Drivers/input"目錄里找到她。在她那里,你可以得到關(guān)于"mice"的一切。
3. 坐標(biāo)
如何得到mouse的當(dāng)前坐標(biāo)值?可通過如下幾步:
1)打開"/dev/input/mice"文件。
2)讀3個(gè)字節(jié)。三個(gè)字節(jié)的值分別是“Button類型”,“X的相對位移”,“Y的相對位移”。這里先用Button, xRel, yRel表示。
3)取Button的低3位(Button & 0x07)。0x00 = LeftButtonUp, 0x01 = LeftButtonDown, 0x02 = RightButtonDown.
4)因?yàn)檫@里取得是相對位移,所以X, Y要分別與上一次的坐標(biāo)值相加。xPos += xRel; yPos +=yRel.
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char **argv)
{
int fd, retval;
char buf[6];
fd_set readfds;
struct timeval tv;
// 打開鼠標(biāo)設(shè)備
fd = open( "/dev/input/mice", O_RDONLY );
// 判斷是否打開成功
if(fd<0) {
printf("Failed to open \"/dev/input/mice\".\n");
exit(1);
} else {
printf("open \"/dev/input/mice\" successfuly.\n");
}
while(1) {
// 設(shè)置最長等待時(shí)間
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_ZERO( &readfds );
FD_SET( fd, &readfds );
retval = select( fd+1, &readfds, NULL, NULL, &tv );
if(retval==0) {
printf( "Time out!\n" );
}
if(FD_ISSET(fd,&readfds)) {
// 讀取鼠標(biāo)設(shè)備中的數(shù)據(jù)
if(read(fd, buf, 6) <= 0) {
continue;
}
// 打印出從鼠標(biāo)設(shè)備中讀取到的數(shù)據(jù)
printf("Button type = %d, X = %d, Y = %d, Z = %d\n", (buf[0] & 0x07), buf[1], buf[2], buf[3]);
}
}
close(fd);
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的c语言中坐标xoy轴在哪里,用C语言在linux下获取鼠标指针的相对位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于nbu oj c语言答案,Just
- 下一篇: 比较排序算法的时间复杂度 c语言,c语言