Кнопка нарисованная владельцем в стиле 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...
}