リストボックスで右クリック

[戻る]
NNN 2001/10/17(水) 00:46:21
リストボックス上で右クリックした際に、
メニューを表示させる処理を行いたいのですが、
この右クリックを受け取る方法が分かりません…。

リストボックス自体は、
VCのリソースエディタでダイアログ上に張り付けて
そのダイアログをDialogBox関数で呼び出しています。

単純に親ダイアログのコールバック関数の
WM_COMMANDでリストボックスを受け取った時に
HIWORD(wParam)で受け取れないかと思ったのですが、
それらしい物がみあたらなくて…。

それとも、この方法では右クリックを受け取る事は
できないのでしょうか?
(MFC関係はさっぱりな物で…)

ku 2001/10/17(水) 08:27:52
こういう場合、どうするのが一番簡単なのか知らないのですが
一応実現できる方法を

1.ClassWizardの「クラスの追加」−「新規」
 クラス名:CMyListBox
 基本クラス:CListBox
 で作成
2.ClassWizardのメンバ変数の追加でリストボックスに
 メンバ変数:m_ListBox
 カテゴリ:コントロール
 変数のタイプ:CMyListBox
3.ダイアログのヘッダに
 #include "MyListBox.h"
 を追加する
4.CMyListBoxのWM_RBUTTONDOWN(OnRButtonDown)で
 メニューを表示する

NNN 2001/10/17(水) 09:34:29
アドバイスありがとうございます。

これってMFCでしか使えないと言うことでしょうか?
通常のSDKだと、クラスの追加が上手くいかないのですが…。

SDKでリストボックス自体がWM_KEYDOWNを受け取る
方法はないのでしょうか?

やっぱりMFCを使えという事なのかな…。

sugar 2001/10/17(水) 09:34:33
DialogBox関数で...とありますが、もしかしてSDKですか?
(MFCかSDKかは、書いておいた方がいいですよ、ホントに。)

SDKということを前提で話しますと、
リストボックスのサブクラス化を行う事でできないでしょうか。
SetWindowLong()でリストボックスのウィンドウプロシジャを自作のものと交換します。
リストボックス用自作ウィンドウプロシジャのなかで、WM_RBUTTONDOWNを処理します。

MFCなら、kuさんの方法でいいと思います。

Bun 2001/10/17(水) 13:33:13
SDKはわかりませんが

WM_CONTEXTMENU は使えませんかね?

NNN 2001/10/18(木) 00:44:21
仰る通りSDKで作っております。
MFCには今ひとつ馴染みが薄くて…。

>リストボックスのサブクラス化を行う事でできないでしょうか。

なるほど。サブクラス化の概念がいまひとつ分かっていなかったのですが、
調べて見るとメッセージを割り込ませる事ができるんですね。
おかげで右クリックを取得できました。ありがとうございます。

NNN 2001/10/18(木) 00:44:53
[[解決]]
解決をつけ忘れていました。

古いスレッドには追加発言できません。