Кнопка нарисованная владельцем в стиле BS_AUTORADIOBUTTON

Как получить проверенное / непроверенное состояние 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))

но это тоже не работает.

2 ответа

Решение

ODS_CHECKED применяется только к меню. BM_GETCHECK и BM_GETSTATE могут предоставить проверенное состояние:

if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)

Согласно документации, 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...
}
Другие вопросы по тегам