3

BS_AUTORADIOBUTTONのチェック済み/非チェック状態を取得するにはどうすればよいですか?私のコードは現在機能しません。

void CPngButton::DrawItem( LPDRAWITEMSTRUCT lpDIS )
{
    ASSERT(lpDIS != NULL);

    UINT state = lpDIS->itemState;
    if (state & ODS_CHECKED)
    {
    // do stuff
    }
}

私も試しました

if (BST_CHECKED == SendMessage(BM_GETCHECK))

しかし、これも機能しません。

4

2 に答える 2

4

ODS_CHECKEDはメニューにのみ適用されます。BM_GETCHECKとBM_GETSTATEは、どちらもチェック状態を提供できます。

if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)
于 2011-02-22T10:42:42.617 に答える
1

ドキュメントによると、ODS_CHECKEDフラグはメニュー項目にのみ適用されます。

ODS_CHECKED   このビットは、メニュー項目をチェックする場合に設定されます。このビットはメニューでのみ使用されます。

代わりに、ボタンのチェック状態を判別するには、CButton::GetCheck関数を呼び出す必要があります。次のいずれかの値を返します。

BST_UNCHECKED           ボタンがオフになっている

BST_CHECKED               ボタンがチェックされています

BST_INDETERMINATE   ボタンの状態は不確定です(BS_3STATEまたはBS_AUTO3STATE設定されている場合のみ)。

例えば:

CButton myBtn;
if (myBtn.GetCheck() = BST_CHECKED)
{
    // Drawing code here...
}
于 2011-02-22T10:43:09.277 に答える