【问题标题】:Check if letter clicked and left button mouse is down win32 API检查是否单击了字母并且鼠标左键已按下 win32 API
【发布时间】:2018-02-24 14:54:34
【问题描述】:

我想听一下鼠标左键是否被点击,还有一个字母,例如'a'

我已经这样做了,只用鼠标点击,我不能同时听 我尝试了以下代码,但对我不起作用

case WM_LBUTTONDOWN:
    hdc = GetDC(hWnd);
    if(GetKeyState('a') & 0x8000)
    {
        SetPixel(hdc, LOWORD(lp), HIWORD(lp), red);
    }
    x = LOWORD(lp);
    y = HIWORD(lp);
    for (int i = 1; i < 200; i++)
        for (int j = 1; j < 200; j++)
            SetPixel(hdc, x + i, y + j, red);

break;

如果我单击左按钮,它会绘制形状,但如果我在按下“a”时尝试这样做,它什么也不做

【问题讨论】:

  • 'a'0x61VK_NUMPAD1。 A 键的虚拟键码是'A'。此外,您希望GetKeyState,而不是GetAsyncKeyState,以避免在用户按下 A,然后单击摩丝,然后在鼠标处理程序运行之前释放 A 时出现竞争情况。最后,您在绘图处理程序之外进行绘图,这意味着您的绘图代码将擦除您在此处绘制的任何内容。
  • 使用完后,您应该使用hdc 调用ReleaseDC
  • @RaymondChen 我试过 if(GetKeyState('A') & 0x8000) 但也没有用!而且我已经在使用 GetKeyState 而不是异步,除此之外我的程序也画得很好问题,没有什么是外部处理程序!
  • @VTT 我做了,但什么也没改变!
  • 如果您将a 更改为A 并将x = LOWORD(lp); 之后的内容放入else 块中,那么当您单击并按A 时应该会看到点出现。现在你在一个点旁边画了一个巨大的正方形,所以可能很难发现它。需要ReleaseDC 以防止资源泄漏。

标签: c++ winapi msdn


【解决方案1】:

抓住WM_KEYDOWN,当键是字母('a')时,用GetAsyncKeyState(VK_LBUTTON)检查鼠标按钮。或者在您的示例中,使用GetAsyncKeyState 而不是GetKeyState 再次检查'a'

【讨论】:

  • 我尝试将 GetKeyState 更改为 GetAsyncKeyState 但它也不起作用!!以及如何使用你的第一个建议,我没听懂
  • 使用 0x41 作为键 A 而不是 0x61。键 A 始终为0x41,大写或小写是附加属性。我的第一个建议与您的方式略有不同 - 要使用它,您必须在没有任何操作的情况下单击鼠标并在按下 'a' 时完成工作。
  • 我已经将其更改为 if(GetAsyncKeyState('A') & 0x8000) 但如果我在鼠标单击时按下 a 仍然没有任何效果!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2010-10-18
  • 1970-01-01
相关资源
最近更新 更多