
c言語win32apiで孫ウインドウからメッセージ処理ができません。
親ウインドウを作りその中に子ウインドウを作りさらに孫ウインドウを作りました。
以下のような感じです。
--
親ウインドウ(A)親はNULL
↓
子ウインドウ(B)親はA
↓
孫ウインドウ(C、プッシュボタン)親はB
で、孫ボタンをクリックしたらwindprocにWM_COMMANDメッセージが飛ぶと思っていたんですが
まったく反応しません。
試しに親をAに変更したらちゃんと動きました。
孫ウインドウからwindprocにメッセージを飛ばすにはどうしたらいいんでしょうか。
それとも何か特別な方法があるんでしょうか。
開発環境はVC++ExpressEdition2008を使っています。
No.3ベストアンサー
- 回答日時:
>1の方法ですがそんな事が出来るんですか!?
>具体的な手法かもしくは参考ページとかあったら教えていただけないでしょうかm(_)m
実際のやり方としては2とそんなに違いはないかと思います。
子ウィンドウが具体的には何かが記述されていないので一般的な回答になりますが・・・
1.元の子ウィンドウのwndprocをGetWindowLongで取得する。
2.新しいwndprocを子ウィンドウに対してSetWindowLongで設定する。
3.新しいwndprocでは孫ウィンドウのWM_COMMANDメッセージを処理する。それ以外はCallWindowProcで元のwndprocを呼び出して処理させる。
これでサブクラス化するはずです。
1.の処理は2.のSetWindowLongの戻り値を利用することもできます。
1の方法は、孫ウィンドウのWM_COMMANDメッセージを受け取ったら、親ウィンドウに対してSendMessageでメッセージを送信する・・・という意味です。こちらも結局サブクラス化してますね・・・
2の方法は、何らかの方法で親ウィンドウハンドルを孫ウィンドウでアクセスできるようにしておく必要があります。
この回答への補足
アドバイスありがとうございますm(_)m
すごく役立ちました。
教えていただいた通りサブクラス化したらちゃんとメッセージ処理できました。
メッセージの飛ぶ仕組みが理解できました。
ほんとにありがとうございます。
No.2
- 回答日時:
孫ウィンドウから見て、子ウィンドウの上に親ウィンドウがあるかどうかはわかりませんから、孫ウィンドウが直接親ウィンドウにWM_COMMANDメッセージを送信することはできないでしょう。
解決方法としては・・・
1.子ウィンドウのwindprocに孫ウィンドウから送信されたWM_COMMANDメッセージを親ウィンドウに送信する(中継)。
2.孫ウィンドウをサブクラス化して孫ウィンドウのwindprocを置き換え、直接WM_COMMANDメッセージを親ウィンドウに送信する。
あたりですかね・・・
この回答への補足
親の配下なんだから当然メッセージも飛ぶものだと思ってました。
1の方法ですがそんな事が出来るんですか!?
具体的な手法かもしくは参考ページとかあったら教えていただけないでしょうかm(_)m
2の方法を試してみたんですがコンパイルはできるもののウンともスンとも言いませんでした。
こっちはもう少し勉強してみます。
No.1
- 回答日時:
普通は、親ウィンドウを検索してそこにイベント通知します。
http://www.geocities.jp/ky_webid/win32c/062.html
http://www.nitoyon.com/vc/reference/gui/static.htm
参考に。
この回答への補足
回答ありがとうございます。
参考ページ見させていただきました。
親ウインドウの検索ってところがいまいちわからないのですが
CreateWindowの第8引数(hParent)にGetParent関数を使うってことでしょうか?
試してみたんですがCのボタンはAの子供になってしまいました。
具体的にどんな感じか教えてもらえないでしょうかm(_)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
皆さん、おはようございます♪ ...
-
Alt+P,Alt+NをPostmessageで送...
-
ウィンドウスタイルの変更
-
最大化と最小化ボタン
-
ゲームでは結局どっちが良いの?
-
勝手にウィンドウが開いて止ま...
-
UWSCで特定のChromeのタブをア...
-
検索の画面がでなくなってしま...
-
「&HFFFF」「&H1A」とは?
-
Vba LongPtrについて教えてくだ...
-
エクセルで1行目から3行目が消...
-
OutlookでRSSフィードやメモの...
-
Tera Termに他のアプリから文字...
-
他アプリケーション’(ウィンド...
-
EXCEL2016で新しいウィンドウを...
-
MFCでハンドルを取得するには
-
グローバルフック?にならない(...
-
VBで外部プログラムを位置のみ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
皆さん、おはようございます♪ ...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
[VBA] UserForm を Excel の W...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
「&HFFFF」「&H1A」とは?
-
指定したインアクティブウィン...
-
エクセルで1行目から3行目が消...
-
OutlookでRSSフィードやメモの...
-
UWSCで特定のChromeのタブをア...
-
VBA .Value=.Value ?
-
パソコン関連)何度消してもま...
-
Alt+P,Alt+NをPostmessageで送...
おすすめ情報