如何在c语言中编写用鼠标点击输入
2个回答
展开全部
//本函数ismouse的作用是检测鼠标,直到有单击后退出函数,单击的位置存在pt里
pt.X和pt.Y就是他的横竖坐标啦
#include<windows.h>
COORD pt;
int ismouse()
{
DWORD dwMode, dwOldMode; /* 原来的模式与新模式 */
DWORD dwRead; /* 已经读取的输入事件数 */
int mouse_pos; /* 用于返回鼠标位置 */
UINT count; /* 用于循环控制 */
INPUT_RECORD ir[128]; /* 控制台输入记录 */
CONSOLE_CURSOR_INFO cci, cciOld; /* 鼠标相关的设置 */
HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE), hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); /* 标准输入输出句柄 */
if(!GetConsoleMode(hStdIn, &dwOldMode)) /* 取得控制台原来的模式 */
{
fprintf(stderr, "GetConsoleMode 错误:%d\n", GetLastError());
return -1;
}
dwMode = dwOldMode;
dwMode &= ~(ENABLE_QUICK_EDIT_MODE);
dwMode |= ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
if(!SetConsoleMode(hStdIn, dwMode)) /* 开启鼠标事件 */
{
fprintf(stderr, "SetConsoleMode 错误:%d\n", GetLastError());
return -1;
}
GetConsoleCursorInfo(hStdOut, &cciOld);
cci.bVisible = TRUE; /* 可见 */
cci.dwSize = 100; /* 块状 */
if(!SetConsoleCursorInfo(hStdOut, &cci))
{
fprintf(stderr, "SetConsoleCursorInfo 错误:%d\n", GetLastError());
return -1;
}
while(1) /* 循环等待用户事件 */
{
if(!ReadConsoleInput(hStdIn, &ir[0], 128, &dwRead))
{
fprintf(stderr, "ReadConsoleInput 错误:%d\n", GetLastError());
return -1;
}
for(count=0; count<dwRead; count++)
{
switch(ir[count].EventType)
{
case MOUSE_EVENT:
switch(ir[count].Event.MouseEvent.dwEventFlags)
{
case 0: /* 取得鼠标单击事件 */
if(ir[count].Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
SetConsoleMode(hStdIn, dwOldMode); /* 还原原来的设置 */
SetConsoleCursorInfo(hStdOut, &cciOld);
mouse_pos = ir[count].Event.MouseEvent.dwMousePosition.X;
mouse_pos = mouse_pos << 16 | ir[count].Event.MouseEvent.dwMousePosition.Y;
return mouse_pos;
}
break;
case MOUSE_MOVED: /* 更新鼠标位置 */
pt.X = ir[count].Event.MouseEvent.dwMousePosition.X;
pt.Y = ir[count].Event.MouseEvent.dwMousePosition.Y;
SetConsoleCursorPosition(hStdOut, pt);
break;
}
break;
default:
break;
}
}
}
}
pt.X和pt.Y就是他的横竖坐标啦
#include<windows.h>
COORD pt;
int ismouse()
{
DWORD dwMode, dwOldMode; /* 原来的模式与新模式 */
DWORD dwRead; /* 已经读取的输入事件数 */
int mouse_pos; /* 用于返回鼠标位置 */
UINT count; /* 用于循环控制 */
INPUT_RECORD ir[128]; /* 控制台输入记录 */
CONSOLE_CURSOR_INFO cci, cciOld; /* 鼠标相关的设置 */
HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE), hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); /* 标准输入输出句柄 */
if(!GetConsoleMode(hStdIn, &dwOldMode)) /* 取得控制台原来的模式 */
{
fprintf(stderr, "GetConsoleMode 错误:%d\n", GetLastError());
return -1;
}
dwMode = dwOldMode;
dwMode &= ~(ENABLE_QUICK_EDIT_MODE);
dwMode |= ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
if(!SetConsoleMode(hStdIn, dwMode)) /* 开启鼠标事件 */
{
fprintf(stderr, "SetConsoleMode 错误:%d\n", GetLastError());
return -1;
}
GetConsoleCursorInfo(hStdOut, &cciOld);
cci.bVisible = TRUE; /* 可见 */
cci.dwSize = 100; /* 块状 */
if(!SetConsoleCursorInfo(hStdOut, &cci))
{
fprintf(stderr, "SetConsoleCursorInfo 错误:%d\n", GetLastError());
return -1;
}
while(1) /* 循环等待用户事件 */
{
if(!ReadConsoleInput(hStdIn, &ir[0], 128, &dwRead))
{
fprintf(stderr, "ReadConsoleInput 错误:%d\n", GetLastError());
return -1;
}
for(count=0; count<dwRead; count++)
{
switch(ir[count].EventType)
{
case MOUSE_EVENT:
switch(ir[count].Event.MouseEvent.dwEventFlags)
{
case 0: /* 取得鼠标单击事件 */
if(ir[count].Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
SetConsoleMode(hStdIn, dwOldMode); /* 还原原来的设置 */
SetConsoleCursorInfo(hStdOut, &cciOld);
mouse_pos = ir[count].Event.MouseEvent.dwMousePosition.X;
mouse_pos = mouse_pos << 16 | ir[count].Event.MouseEvent.dwMousePosition.Y;
return mouse_pos;
}
break;
case MOUSE_MOVED: /* 更新鼠标位置 */
pt.X = ir[count].Event.MouseEvent.dwMousePosition.X;
pt.Y = ir[count].Event.MouseEvent.dwMousePosition.Y;
SetConsoleCursorPosition(hStdOut, pt);
break;
}
break;
default:
break;
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询