[英]check radiobutton state winapi
I use mingw32 compiler.我使用 mingw32 编译器。 I created two radioButton:
我创建了两个单选按钮:
radio1 = CreateWindowExW(WS_EX_TRANSPARENT , L"BUTTON", L"RadioButton1",
WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,
0, 0, 0, 0,
hwnd, (HMENU)ID_RADIOBTN1,
GetModuleHandle(NULL), 0);
SendMessage(radioBtnDaily, WM_SETFONT, (WPARAM) font, TRUE);
radio2 = CreateWindowExW(WS_EX_TRANSPARENT , L"BUTTON", L"RadioButton2",
WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,
0, 0, 0, 0,
hwnd, (HMENU)ID_RADIOBTN2,
GetModuleHandle(NULL), 0);
SendMessage(radio1, BM_SETCHECK , (WPARAM) font, TRUE);
SendMessage(radio2, WM_SETFONT, (WPARAM) font, TRUE);
And I handle the check state, something like this:我处理支票 state,如下所示:
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_RADIOBTN1:
{
MessageBoxW( NULL, "radio1 is checked", L"radio", MB_OK | MB_ICONERROR );
}
break;
case ID_RADIOBTN2:
{
MessageBoxW( NULL, "radio2 is checked", L"radio", MB_OK | MB_ICONERROR );
}
break;
....
But this always run when I click the radiobutton so it not check the state. How to check the state without use the click event?但这总是在我单击单选按钮时运行,因此它不会检查 state。如何在不使用单击事件的情况下检查 state?
Use IsDlgButtonChecked : 使用IsDlgButtonChecked :
if(IsDlgButtonChecked(hwnd, ID_RADIOBTN1))
MessageBox(NULL, "radio1 is checked")
else
MessageBox(NULL, "radio1 is not checked")
Use the BM_GETCHECK
message, or the Button_GetCheck()
macro, to get the radio button's actual state, eg: 使用
BM_GETCHECK
消息或Button_GetCheck()
宏来获取单选按钮的实际状态,例如:
radio1 = CreateWindowExW(WS_EX_TRANSPARENT , L"BUTTON", L"RadioButton1",
WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,
0, 0, 0, 0,
hwnd, (HMENU)ID_RADIOBTN1,
GetModuleHandle(NULL), 0);
SendMessage(radio1, WM_SETFONT, (WPARAM) font, TRUE);
radio2 = CreateWindowExW(WS_EX_TRANSPARENT , L"BUTTON", L"RadioButton2",
WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,
0, 0, 0, 0,
hwnd, (HMENU)ID_RADIOBTN2,
GetModuleHandle(NULL), 0);
SendMessage(radio2, WM_SETFONT, (WPARAM) font, TRUE);
. 。
case WM_COMMAND:
if ((HIWORD(wParam) == BN_CLICKED)
{
switch(LOWORD(wParam))
{
case ID_RADIOBTN1:
{
switch (Button_GetCheck(radio1))
{
case BST_CHECKED:
MessageBoxW( NULL, L"radio1 is checked", L"radio", MB_OK );
break;
case BST_INDETERMINATE:
MessageBoxW( NULL, L"radio1 is indeterminate", L"radio", MB_OK );
break;
case BST_UNCHECKED:
MessageBoxW( NULL, L"radio1 is unchecked", L"radio", MB_OK );
break;
}
}
break;
case ID_RADIOBTN2:
{
switch (Button_GetCheck(radio2))
{
case BST_CHECKED:
MessageBoxW( NULL, L"radio2 is checked", L"radio", MB_OK );
break;
case BST_INDETERMINATE:
MessageBoxW( NULL, L"radio2 is indeterminate", L"radio", MB_OK );
break;
case BST_UNCHECKED:
MessageBoxW( NULL, L"radio2 is unchecked", L"radio", MB_OK );
break;
}
}
break;
}
}
break;
那么这取决于你想要检查按钮状态的事件,所以你需要某种交互(这可能是另一个事件,如窗口最小化,调整大小等或其他线程检查但不修改控件的状态)
It you need to test the state of the radio button, you can use (in pascal):如果你需要测试单选按钮的 state,你可以使用(帕斯卡):
if SendMessage(hradiobutton, BM_GETCHECK, 0, 0) = BST_CHECKED
(this for checked state). (这用于检查状态)。
You can replace BST_CHECKED with all the constants listed at:您可以将 BST_CHECKED 替换为以下位置列出的所有常量:
Documentation from Microsoft 微软文档
Please, forgive my errors.请原谅我的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.