因为Windows不需要鼠标,应用程序应该能够使用键盘来模拟鼠标操作。以下示例显示了如何通过使用GetCursorPos和SetCursorPos函数以及通过处理箭头键的输入来实现此目的。
HCURSOR hCurs1, hCurs2; //光标句柄
POINT pt; //光标位置
RECT rc; //客户区域坐标
static int repeat = 1; //重复键计数器
//
//其他声明和初始化。
//
开关(讯息)
{
//
//处理其他消息。
//
case WM_KEYDOWN:
if (wParam != VK_LEFT && wParam != VK_RIGHT &&
wParam != VK_UP && wParam != VK_DOWN)
{
break;
}
GetCursorPos(&pt);
//将屏幕坐标转换为客户端坐标。
ScreenToClient(hwnd, &pt);
开关(wParam)
{
//移动光标以反映哪一个
//按箭头键。
case VK_LEFT: // 左箭头
pt.x -= repeat;
break;
case VK_RIGHT: // 右箭头
pt.x += repeat;
break;
case VK_UP: // 向上箭头
pt.y -= repeat;
break;
case VK_DOWN: //向下箭头
pt.y += repeat;
break;
默认:
return NULL;
}
repeat++; //增加重复计数
//将光标保留在客户区中。
GetClientRect(hwnd, &rc);
if (pt.x >= rc.right)
{
pt.x = rc.right - 1;
}
其他
{
if(pt.x {98??9796003} rc.left)
{
pt.x = rc.left;
}
}
if (pt.y >= rc.bottom)
pt.y = rc.bottom - 1;
其他
if(pt.y < rc.top)
pt.y = rc.top;
//将客户端坐标转换为屏幕坐标。
ClientToScreen(hwnd, &pt);
SetCursorPos(pt.x, pt.y);
break;
case WM_KEYUP:
repeat = 1; //清除重复计数
break;
}