c语言检测四个方向键盘输入,如何既检测鼠标单击又检测键盘输入
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
判断鼠标单击程序
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 ", 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 ", GetLastError());
GetConsoleCursorInfo(hStdOut, &cciOld);
cci.bVisible = TRUE; /* 可见 */
cci.dwSize = 100; /* 块状 */
if(!SetConsoleCursorInfo(hStdOut, &cci))
fprintf(stderr, "SetConsoleCursorInfo 错误:%d ", GetLastError());
while(1) /* 循环等待用户事件 */
if(!ReadConsoleInput(hStdIn, &ir[0], 128, &dwRead))
fprintf(stderr, "ReadConsoleInput 错误:%d ", GetLastError());
for(count=0; 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);
default:
判断键盘输入程序
char direction;
if(kbhit())
direction=getch();
因为鼠标单击检测要一定的时间,所用怎么办