简体   繁体   English

检查单选按钮 state winapi

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM