C - 赢取 API - 单选按钮事件收到两次



我使用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;
}

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

最新更新