リストボックス上で右クリックした際に、
メニューを表示させる処理を行いたいのですが、
この右クリックを受け取る方法が分かりません…。
リストボックス自体は、
VCのリソースエディタでダイアログ上に張り付けて
そのダイアログをDialogBox関数で呼び出しています。
単純に親ダイアログのコールバック関数の
WM_COMMANDでリストボックスを受け取った時に
HIWORD(wParam)で受け取れないかと思ったのですが、
それらしい物がみあたらなくて…。
それとも、この方法では右クリックを受け取る事は
できないのでしょうか?
(MFC関係はさっぱりな物で…)
こういう場合、どうするのが一番簡単なのか知らないのですが
一応実現できる方法を
1.ClassWizardの「クラスの追加」-「新規」
クラス名:CMyListBox
基本クラス:CListBox
で作成
2.ClassWizardのメンバ変数の追加でリストボックスに
メンバ変数:m_ListBox
カテゴリ:コントロール
変数のタイプ:CMyListBox
3.ダイアログのヘッダに
#include MyListBox.h
を追加する
4.CMyListBoxのWM_RBUTTONDOWN(OnRButtonDown)で
メニューを表示する
アドバイスありがとうございます。
これってMFCでしか使えないと言うことでしょうか?
通常のSDKだと、クラスの追加が上手くいかないのですが…。
SDKでリストボックス自体がWM_KEYDOWNを受け取る
方法はないのでしょうか?
やっぱりMFCを使えという事なのかな…。
DialogBox関数で...とありますが、もしかしてSDKですか?
(MFCかSDKかは、書いておいた方がいいですよ、ホントに。)
SDKということを前提で話しますと、
リストボックスのサブクラス化を行う事でできないでしょうか。
SetWindowLong()でリストボックスのウィンドウプロシジャを自作のものと交換します。
リストボックス用自作ウィンドウプロシジャのなかで、WM_RBUTTONDOWNを処理します。
MFCなら、kuさんの方法でいいと思います。
SDKはわかりませんが
WM_CONTEXTMENU は使えませんかね?
仰る通りSDKで作っております。
MFCには今ひとつ馴染みが薄くて…。
>リストボックスのサブクラス化を行う事でできないでしょうか。
なるほど。サブクラス化の概念がいまひとつ分かっていなかったのですが、
調べて見るとメッセージを割り込ませる事ができるんですね。
おかげで右クリックを取得できました。ありがとうございます。
解決をつけ忘れていました。