サブクラスをした場合のイベント処理

解決


エックス  2007-02-28 00:00:33  No: 64542

VS2005 + MFCで開発しています。

リストボックスをサブクラス化して、ドラッグ処理を行えるリストボックス、MyListBoxを作りました。
次にMyListBoxで選択が変更された場合のイベントを処理しようと思い、選択変更時のイベントハンドラをMyListBoxに追加したのですが、イベントが来ません。
選択が変更された場合などの、もとからあるイベントはサブクラスしたクラスに追加してはいけないのでしょうか?
この場合、どういう風にソースを書くのが正しいのでしょうか?

分かる方がいましたら、教えてください。
よろしくお願いします。


Blue  2007-02-28 00:15:50  No: 64543

どのようにして既存のListBoxからサブクラス化していますか?

ウィザードで、ダイアログ(かなにか)のメンバ変数としてCListBoxを設置しましたか?

それとも、手動でおいて、OnInitDialogあたりでSubclassDlgItemとかのメソッドで
結び付けていますか?


Blue  2007-02-28 00:16:19  No: 64544

訂正

>メンバ変数としてCListBoxを設置しましたか?
メンバ変数としてMyListBoxを設置しましたか?


エックス  2007-02-28 00:41:42  No: 64545

Blueさん、返信ありがとうございます。

>どのようにして既存のListBoxからサブクラス化していますか?
手動でおいて、OnInitDialogでSubclassDlgItem使い結び付けています。


Blue  2007-02-28 00:52:05  No: 64546

では
>ドラッグ処理
はサブクラス化したほうでできているのですね?

>選択変更時のイベントハンドラ
は何をハンドリングしましたか?


エックス  2007-02-28 01:00:09  No: 64547

ドラッグ処理は、サブクラス化した方で動作しています。

選択変更時は、LBN_SELCHANGEをハンドリングしています。


Blue  2007-02-28 01:08:46  No: 64548

おかしいですね。

BEGIN_MESSAGE_MAP(MyListBox, CListBox)
    //{{AFX_MSG_MAP(MyListBox)
    ON_CONTROL_REFLECT(LBN_SELCHANGE, OnSelchange)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

みたいな記述はありますよね?(VC6のコードなんで若干違うかもしれないけど)


エックス  2007-02-28 01:52:38  No: 64549

>みたいな記述はありますよね?(VC6のコードなんで若干違うかもしれないけど)
メッセージマップにON_LBN_SELCHANGEを使っていて、
ON_CONTROL_REFLECTに変更することで、ちゃんと動作することができました。

ほんとうにありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加