
イベント取得に苦戦しております。
環境は、
Microsoft Visual Studio 2008 Professional Edition - JPN
MDIです。
取得したいイベントなのですが、
メニューバーの「Windows」の各ファイル名称を選択した時の
イベントを取得して処理を行いたいのですが、どうすれば取得できるのでしょうか?
Windows
Tile
Cascade
-----------
Project_1 ←ここのイベントを取得したい
Project_2 ←ここのイベントを取得したい
afxres.h
AFX_IDM_FIRST_MDICHILD
いろいろと調べた結果上記のヘッダの「AFX_IDM_FIRST_MDICHILD
」がProject_1のIDとなっており、Project_2は+1したIDとなっております。
メッセージマップで
ON_COMMAND(AFX_IDM_FIRST_MDICHILD,&CMainFrame::~~~~~
とすれば、とりあえずはイベントは取れるのですが、
正規の動作が予想のごとくできませんでした。
何か他の方法で、取得して、既存の処理を損なうことなく動作することは、
できるのでしょうか?
何か方法があればご教授御願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>何か他の方法で、取得して、既存の処理を損なうことなく動作することは、
>できるのでしょうか?
メッセージハンドラ内でCWnd::Default()を呼ぶのではだめですか?
サブクラス化しなくてもデフォルト・ウィンドウ・プロシージャが呼ばれる
はずですが...
http://msdn.microsoft.com/ja-jp/library/ww9f7hst …
No.2
- 回答日時:
>何か他の方法で、取得して、既存の処理を損なうことなく動作することは、できるのでしょうか?
メッセージマップでは、受け取ったメッセージはデフォルトのウィンドゥプローシジャ関数に渡されないので、既存のデフォルト処理は行われません。
メニューバーを付けたメインのフレームウィンドゥをサブクラス化し、ウィンドゥプローシジャ関数を乗っ取る必要があります。
#include <windows.h>
WNDPROC DefStaticProc; //元のウィンドゥプローシジャ関数のアドレスを記憶する変数。
//新しく呼ばれるウィンドゥプローシジャ関数
LRESULT CALLBACK StaticProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch(msg) {
case WM_COMMAND:
switch(LOWORD(wp)) {
case AFX_IDM_FIRST_MDICHILD:
//ここで何かを処理
break; //このbreak文を「return 0;」に変えると、デフォルトの処理をしなくなる。
case AFX_IDM_FIRST_MDICHILD + 1:
//ここで何かを処理
break; //このbreak文を「return 0;」に変えると、デフォルトの処理をしなくなる。
}
}
//元のウィンドゥプローシジャ関数をCallWindowProc関数を用いて呼び出し、デフォルトの処理をさせる。
return CallWindowProc(DefStaticProc , hwnd , msg , wp , lp);
}
(中略)
//プログラムの初期化をする場所、メニューバーを付けたメインのフレームウィンドゥが作成された後に1度だけ通る場所で行う。
//hWndはメニューバーを付けたメインのフレームウィンドゥのウィンドゥハンドルを指定する。
//hWndはWinMainに渡されて来るプロセスのハンドルではない事に注意。
//
//元のウィンドゥプローシジャ関数のアドレスを取得する。
DefStaticProc = (WNDPROC)GetWindowLong(hWnd , GWL_WNDPROC);
//ウィンドゥプローシジャ関数を挿げ替える。
SetWindowLong(hWnd , GWL_WNDPROC , (LONG)StaticProc);
(中略)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- 労働相談 有給取ってイベントに行くつもりでチケット購入後に何らかの理由(事業に支障が出る以外)で有給取得を取り 5 2023/04/11 11:21
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- イベント・祭り 4月2日午前中に開催されるチケットが必要な有名なイベントを教えてください。 1 2023/04/01 08:06
- その他(行事・イベント) 4月2日でチケットが必要な午前中開始のイベントで有名なものを教えてください。 0 2023/04/01 07:57
- その他(プログラミング・Web制作) バッチファイルでPCのモデル名を取得したい 1 2022/03/31 10:58
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS側からEXCELの書式を設定...
-
キャンセルの方法
-
Excel VBA 実行中に一瞬フリー...
-
「shift」ボタンが押された時。
-
DirectX環境下での方向キー同時...
-
VBSの処理中一旦処理を止めて再...
-
Excel VBA で処理中断(DoEvents...
-
シャットダウン時のExcel強制終...
-
EXCEL VBA「Application.Displa...
-
VBA kernel32 の意味
-
スタティックテキストが表示さ...
-
メッセージボックスのボタン名変更
-
Application.ScreenUpdating=Fa...
-
CPUを増やすとそれだけ性能があ...
-
MFCのワーカースレッドとUIスレ...
-
for文実行中を途中で中断するに...
-
OSシャットダウン時の常駐アプ...
-
Windowsがシャットダウンする前に
-
VB.NETのUsingキーワードの使い方
-
ボタンが押された事を検知する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
ACCESS側からEXCELの書式を設定...
-
メッセージボックスのボタン名変更
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
Excel VBA で処理中断(DoEvents...
-
VBA、UserFormを前面に出力して...
-
Application.ScreenUpdating=Fa...
-
MFCのワーカースレッドとUIスレ...
-
ASP.NETでのメッセージ画面を出...
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
【C#】 あるイベントから別イ...
-
ボタンが押された事を検知する...
-
PostMessageの連続送信
-
VBA メッセージボックスを自動...
-
エクセルVBAでクリップボード内...
-
VCでウエイトをミリ秒でかけ...
-
ループを使わずに、特定時間に...
-
VB6 コマンドボタン クリック...
おすすめ情報