4

私はmingw32コンパイラを使用しています。2 つの 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);

そして、次のようなチェック状態を処理します。

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

しかし、これはラジオボタンをクリックすると常に実行されるため、状態はチェックされません。クリックイベントを使わずに状態を確認するには?

4

3 に答える 3

3

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;
于 2013-04-03T17:46:27.830 に答える
0

それは、ボタンのステータスを確認するイベントに依存するため、何らかの対話が必要です (これは、ウィンドウの最小化、サイズ変更などの別のイベント、またはコントロールの状態を変更しない別のスレッド チェックである可能性があります)。

于 2013-04-03T14:46:26.787 に答える