Я создаю собственное окно в WTL для хранения элементов управления видео для приложения DirectShow.
Я создал набор флажков, которые я хочу вести себя как "толчок" (BS_PUSHLIKE).Они определены в файле .rc для диалогового окна следующим образом:
CONTROL "",IDC_VID1,"Button",BS_AUTOCHECKBOX | BS_BITMAP | BS_PUSHLIKE | WS_GROUP | WS_TABSTOP,6,7,19,18
Я также загрузил список изображений для кнопки, который правильно показывает соответствующее изображение, когда кнопка находится в состояниях LButtonDown и LButtonUp:
В приведенном ниже коде m_btnVid1 определяется как WTL :: CBitmapButton
m_ilBtnVid1.CreateFromImage( IDB_TV, 25, 1, CLR_NONE, IMAGE_BITMAP, LR_CREATEDIBSECTION );
m_btnVid1.SubclassWindow( (HWND) ::GetDlgItem(m_hWnd, IDC_VID1) );
m_btnVid1.SetImageList( m_ilBtnVid1.m_hImageList );
m_btnVid1.SetImages(0,1);
Как только я отпускаю кнопку мыши, состояние флажков возвращается в состояние «не проверено».
Я добавил COMMAND_ID_HANDLER_EX в элемент управления IDC_VID1, чтобы определить состояние элемента управления, но переменная nState всегда читает 0:
void OnVid1(UINT uNotifyCode, int nID, CWindow wndCtl)
{
CBitmapButton* btn = &m_btnVid1;
int nState = btn->GetCheck();
switch( nState )
{
case BST_UNCHECKED:
btn->SetCheck( BST_CHECKED );
nState = btn->GetCheck();
break;
default:
btn->SetCheck( BST_UNCHECKED );
break;
}
}
Может кто-нибудь подсказать, почему это может быть - яотсутствует стиль создания в CBitmapButton?
Если это поможет, я уверен, что могу как-нибудь опубликовать файл решения VC2008.