Нарисованная пользователем кнопка в стиле 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))

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


person sashoalm    schedule 22.02.2011    source источник


Ответы (2)


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

if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)
person Erik    schedule 22.02.2011
comment
Обратите внимание, что вам необходимо включить windowsx.h, чтобы использовать макрос Button_GetState. - person Cody Gray; 22.02.2011

Согласно документации, флаг 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...
}
person Cody Gray    schedule 22.02.2011