0

私はWin32コントロール/ダイアログ/ウィンドウの周りにかなり単純なラッパーを書いています。

私が抱えている問題は、ListBoxとComboBoxの動作がかなり異なるように見えることです。

継承元の基本Widgetクラスで、コントロールの既存のWNDPROCをオーバーライドしてから、新しいWNDPROCでメッセージを処理し、主に、boost::signalイベントにメッセージを昇格させます。

問題は、ComboBoxのWndProcがCBN_SELCHANGEを受信して​​いるのに、予想どおり、ListBoxのWndProcがLBN_SELCHANGEコマンドを受信して​​いないことです。

コントロールを所有するダイアログ/ウィンドウがこれを受け取る可能性が高いことはわかっていますが、私はすでにこのうさぎの穴を掘り下げており、かなりきちんとした解決策のように感じます。バックアウトして、コントロールの所有者にWM_COMMANDメッセージを処理させる必要があります(そしてそこから、コントロール自体のイベントにプロモートします)。

これは学習演習なので、MFCについて思い出させたり、これを行うことの価値についてコメントしたりしないでください。

4

1 に答える 1

1

通知メッセージは通常、コントロールの親に送信されます。おそらく、すべてのウィンドウ(つまり、親ウィンドウとコントロールの両方)が同じウィンドウ手順を使用していますか?この場合の通常の解決策は次のとおりです。ウィンドウプロシージャの通知ハンドラで、通知が現在のウィンドウから送信されたかどうかを確認します。もしそうなら、イベントを起こします。メッセージを元のコントロールに再送信しなかった場合(イベントとして発生します)。

于 2012-11-11T20:19:17.250 に答える