Win32 / WTL-我的Checkbox图像列表状态恢复为未选中状态

时间:2010-07-26 22:03:18

标签: winapi checkbox wtl

我正在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);

只要我松开鼠标按钮,复选框状态就会恢复为“未选中”状态。

我在IDC_VID1控件中添加了一个COMMAND_ID_HANDLER_EX来确定控件的状态,但是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解决方案文件。

0 个答案:

没有答案