Кнопка, нарисованная владельцем, в стиле BS_AUTORADIOBUTTON - PullRequest
3 голосов
/ 22 февраля 2011

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

4 голосов
/ 22 февраля 2011

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

if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)
1 голос
/ 22 февраля 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...
}
...