【问题标题】:Win32 Keyboard combinationWin32键盘组合
【发布时间】:2017-09-08 01:31:58
【问题描述】:

我需要结合 Alt +(左箭头、右箭头、上箭头、下箭头)键在 Win32 中移动窗口。

可能是这样的吧?

case WM_KEYDOWN:
    {
        if (GetKeyState(VK_MENU) < 0 && GetKeyState(VK_UP) < 0) {
        }
    }

我该怎么做?

【问题讨论】:

  • 参见 WM_SYSKEYDOWN。

标签: c++ visual-studio winapi keyboard


【解决方案1】:

您应该在处理 WM_SYSKEYDOWN 消息期间使用 GetKeyState 函数。

case WM_SYSKEYDOWN:
{
    if ( GetKeyState ( VK_MENU ) < 0 && GetKeyState ( VK_UP ) < 0 )
    {

    }
}

【讨论】:

  • 我必须在括号内使用哪个函数?
  • 我不确定我是否理解您的问题。你能解释一下吗?您之前的示例是正确的,但消息类型除外。您必须使用 WM_SYSKEYDOWN 来捕捉单击 ALT(system) 按钮的时刻。
  • 我创建了一个子窗口,当我按下 alt + 箭头键时我需要移动它。
  • 您可以将 SetWindowPos 用于键处理程序中的子窗口。
【解决方案2】:

请注意,当用户通过其(uni)代码位置输入字符时,VK_UP 可能来自数字键盘。 Windows 上的预期行为是数字字符输入独立于 NumLock 状态工作。因此,您必须跟踪这一点:仅在释放 Alt 后才对 Alt+Numpad 输入做出反应:如果到目前为止输入了多个键,请忽略它并让 TranslateMessage() 将其转换为 WM_CHAR(希望在您的主消息循环中)。

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多