GetKeyState在Windows 2000(C ++)中不起作用

时间:2010-10-19 14:15:48

标签: c++ windows directx mouse

我刚刚在Windows 2000 SP4系统上测试了我的DirectX游戏,但它不会收到任何鼠标点击!

这是我检查鼠标点击的方式:

    unsigned int mButtons = 0;
    if (GetKeyState(VK_LBUTTON) < 0) mButtons |= HIDBoss::MOUSE_LEFT;
    if (GetKeyState(VK_RBUTTON) < 0) mButtons |= HIDBoss::MOUSE_RIGHT;
    if (GetKeyState(VK_MBUTTON) < 0) mButtons |= HIDBoss::MOUSE_MIDDLE;
    if (GetKeyState(VK_XBUTTON1) < 0) mButtons |= HIDBoss::MOUSE_4;
    if (GetKeyState(VK_XBUTTON2) < 0) mButtons |= HIDBoss::MOUSE_5;

等...

此代码在Windows 7和XP 32 / 64bit上完美运行。

问题是修复,如果我使用 OIS 库 - 它使用DirectX输入 - 但它包含一些错误,所以我宁愿避免它。

有人可以建议为什么GetKeyState不能在W2K上运行吗?可能是因为系统在过去几年中没有通过Windows Update进行更新......?

感谢您的时间,

比尔

1 个答案:

答案 0 :(得分:1)

我不确定为什么它不起作用但我建议改用GetAsyncKeyState

修改:回答您的评论。这只是一个建议,但同样很容易通过调用来交换按钮:

GetSystemMetrics(SM_SWAPBUTTON)

你的大问题是因为GetKeyState不应该仅为键盘按钮返回鼠标按键的值。它在某些操作系统中工作的事实并不是你应该能够依赖所有操作系统的东西。

  

应用程序调用GetKeyState   响应键盘输入消息。   此函数检索状态   输入消息时的键   生成。

值得注意的是,它特别提到调用它来响应键盘输入消息(即WM_KEY [UP / DOWN])。同样没有提到这应该适用于老鼠。因此,你最好只使用GetAsyncKeyState ......