我正在 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 解决方案文件。