1

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ソリューションファイルを投稿できると確信しています。

4

0 に答える 0