CListCtrl クラスがあり、ユーザーがサブ項目の 1 つを選択すると、そのサブ項目の上に CComboBox が表示され、ユーザーはそこから選択できます。
しかし、私には問題があります。ユーザーが選択を行ったら、コンボ ボックスを非表示にする必要があります (つまり、CBN_SELCHANGE をインターセプトします)。問題は、CComboBox を CListCtrl の子にする必要があることです (そうしないと、コンボ ボックスを一番上に設定しても、リストがコンボ ボックスの上に描画されるという奇妙な問題が発生します)。そのため、CBN_SELCHANGE メッセージがリスト ビューに送信され、当然のことながら、それは無視されます。リストビューでそのメッセージを親ウィンドウに渡すにはどうすればよいですか。
CBN_SELCHANGE メッセージを傍受して親ウィンドウに渡すだけの独自の CListCtrl クラスを本当に派生させる必要があるのでしょうか? OnWndMsg ハンドラーを作成するよりも良い方法はありますか?
助けてくれてありがとう!
編集:このコードは機能します
class CPassThroughListCtrl : public CListCtrl
{
protected:
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if ( message == WM_COMMAND )
{
GetParent()->SendMessage( message, wParam, lParam );
}
return CListCtrl::OnWndMsg( message, wParam, lParam, pResult );
}
public:
CPassThroughListCtrl()
{
};
};
しかし、これを行うためのより良い方法があれば本当に知りたいです。