Winapi:如何根据按下的键为我的按钮发送不同的消息?

问题描述 投票:0回答:2

我创建了一个按钮,单击该按钮时,将打开一个

.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;
}

我希望当我按下按键(例如,

"shift"
)单击按钮时,当前应用程序不会关闭。

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

c++ winapi button keyboard
2个回答
1
投票

您可以通过调用

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

调用

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


-2
投票

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

  1. 您的按钮将发送另一条消息(WM_BUTTON_EXE_RAW)。
  2. 如果仅按下按钮,您会捕获该消息并重新发送其他消息(BUTTON_EXE)。
© www.soinside.com 2019 - 2024. All rights reserved.