【问题标题】:Winapi : How do I for my button send different message according to the key pressed?Winapi:如何根据按下的键为我的按钮发送不同的消息?
【发布时间】:2022-01-24 10:35:16
【问题描述】:

我创建了一个按钮,单击该按钮将打开一个.exe 文件并关闭当前应用程序:

HWND Button = CreateWindowEx(0, L"Button", L"Exe Application", WS_BORDER | WS_VISIBLE | WS_CHILD, 500, 500, 200, 200, hWndParent, (HMENU)BUTTON_EXE, 0, 0); 

而在WindProc

switch (uMsg)
{
    case WM_COMMAND:
        switch (wParam)
        {
        case BUTTON_EXE:
            ShellExecute(hwnd, NULL, L"Module 1.exe", NULL, NULL, SW_SHOW);
            PostQuitMessage(0);
            return 0;
        }
    return 0;
}

我希望当我在按下某个键的情况下单击按钮(例如,"maj")时,当前应用程序不会关闭。

所以,我希望根据单击按钮时按下的键,它发送不同的消息,但我没有找到如何。有没有办法做到这一点?

【问题讨论】:

  • 什么是"maj" 键?或者,您是指单独的键 maj

标签: c++ winapi button keyboard


【解决方案1】:

您可以通过调用GetKeyState 函数来检查在处理WM_COMMAND 消息时是否按下了某个键。根据其返回值,您可以实现不同的逻辑。

调用GetKeyState(而不是GetAsyncKeyState)以获取单击按钮时的键状态非常重要。

【讨论】:

    【解决方案2】:

    您可以对消息进行额外处理。例如:

    1. 您的按钮将发送另一条消息 (WM_BUTTON_EXE_RAW)。
    2. 如果仅按下按钮 maj,您会捕获该消息并重新发送其他消息 (BUTTON_EXE)。

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多