【问题标题】:win api - radio button event received twicewin api - 收到两次单选按钮事件
【发布时间】:2019-10-21 05:39:25
【问题描述】:

我使用 Visual Studio 2019 模板创建了一个 Windows 桌面应用程序。我添加了包含两个单选按钮 (BS_AUTORADIOBUTTON) 的无模式对话框。当我使用鼠标选择单选按钮时,我会收到一个单选按钮事件,但是当我使用箭头键(向上/向下)在单选按钮之间切换时,我会收到两次单选按钮事件。为什么 ?它是如何工作的 ?主消息循环如下所示:

while (GetMessage(&msg, nullptr, 0, 0))
{
    if (!IsDialogMessage(dialogBoxHandle, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

这里是无模式对话框事件过程:

INT_PTR CALLBACK MyProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case ID_RADIOBUTTON1:
            {
                std::cout << "ID_RADIOBUTTON1" << std::endl;
                return (INT_PTR)TRUE;
            }
        case ID_RADIOBUTTON2:
            {
                std::cout << "ID_RADIOBUTTON2" << std::endl;
                return (INT_PTR)TRUE;
            }
        }
        break;
    }
    return (INT_PTR)FALSE;
}

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    您假设单选按钮只能在 WM_COMMAND 消息中发送一种通知。您检查 WPARAM 的低位字以找出哪个控件正在发送消息(这是正确的),但您还需要检查 WPARAM 的高位字以找出控件正在发送的通知。请参阅Button Control NotificationsWM_COMMAND message

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2022-01-06
      • 2019-04-29
      • 2013-03-16
      相关资源
      最近更新 更多