DirectShowアプリのビデオコントロールを保持するために、WTLでカスタムウィンドウを作成しています。
「プッシュのような」方法(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ソリューションファイルを投稿できると確信しています。