0

アプリケーションでラジオボタンのように機能する2つのチェックボックスを取得しようとしています。IE-一方がチェックされると、もう一方のボタンはそれ自体のチェックを外します。これがプロパティメニューから実現できるとは思わないので、コードで実行しようとしています。

私はこれを行う方法についてまったく知らないので、少し迷っています。これは私がこれまでに持っているものです(これは機能していません)

    case BN_CLICKED:
    if(BN_CLICKED == IDC_CHECK_MW){
        SendMessage(GetDlgItem(hDlg,IDC_CHECK_MW), BM_GETCHECK, (WPARAM)0 ,(LPARAM)0) == BST_CHECKED;
    }

私はかなりおかしいかもしれませんが、どんな助けでも素晴らしいでしょう!

4

1 に答える 1

2

ハンドルや便利なものがある場合は、次のように送信してBM_SETCHECKください。

int checkState = SendMessage (otherHwnd, BM_GETCHECK, 0, 0);
SendMessage (otherHwnd, BM_SETCHECK, checkState == BST_CHECKED ? BST_UNCHECKED : BST_CHECKED, 0);

もちろん、これは中間状態ではなく、チェックまたはチェック解除のみが可能であることを前提としています。チェックボックスはそのように機能することを意図しており、ラジオボタンはこの動作に適したツールであるため、私はあなたの考えを本当に再考します.

また、メッセージスイッチでは、おそらくこれが必要です:

case WM_COMMAND:
{
    if (HIWORD (wParam) == BN_CLICKED)
    {
        switch (LOWORD (wParam))
        {
            case IDC_CHECK_MW:
                //check this, uncheck that
                break;

            case IDC_OTHER_CHECK:
                //check other, uncheck first
                break;

            default:
                //something went wrong
        }
    }    
}
于 2012-05-22T12:23:20.413 に答える