Win32 / WTL - состояние моего списка изображений Checkbox возвращается в непроверенное состояние - PullRequest
1 голос
/ 27 июля 2010

Я создаю собственное окно в 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.

...