1

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

4

0 回答 0