![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
イベント取得に苦戦しております。
環境は、
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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
ラジオボタンのグループ化
C言語・C++・C#
-
-
4
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
5
MFCのダイアログのリソースが更新されない
C言語・C++・C#
-
6
MFCでOnPaintのタイミング
C言語・C++・C#
-
7
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
8
MFC ダイアログ上のID取得について
C言語・C++・C#
-
9
ダイアログボックスで指定したサイズどおり表示されない
C言語・C++・C#
-
10
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
11
コンボボックスのドロップダウンリストが表示されない
C言語・C++・C#
-
12
ビットマップ(bmp)形式で背景を透過にできる?
画像編集・動画編集・音楽編集
-
13
MFCでハンドルを取得するには
C言語・C++・C#
-
14
VC++にてボタン等のサイズ取得
C言語・C++・C#
-
15
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
16
デバッグ中のエラーのことで教えてください。
C言語・C++・C#
-
17
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
18
【C++/CLI.NET】コンボボックスの値の設定・取得
C言語・C++・C#
-
19
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
20
VC++でUTF-8のファイルを出力したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS側からEXCELの書式を設定...
-
thunderbirdのメッセージフィル...
-
VBSで応答不要のメッセージボッ...
-
[VC++] AfxBeginThreadで生成し...
-
FPS制御について
-
VC++ MFC フォルダサイズの表示
-
VBA メッセージボックスを自動...
-
マルチスレッドを実現したい
-
ASP.NETでのメッセージ画面を出...
-
VBA kernel32 の意味
-
逆コンパイルと逆アセンブルの...
-
Macターミナルで実行中のプログ...
-
USJでの割り込み
-
緯度、経度の 10進法と 60進法...
-
3のつく数字と3の倍数のみを表...
-
プログラミングの問題です。写...
-
【プログラミングScratch】で音...
-
他のアプリケーションをクリッ...
-
F-BASICからC言語への変換
-
OpenCvsharpについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
VBA kernel32 の意味
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
エクセルVBAでクリップボード内...
-
Application.ScreenUpdating=Fa...
-
Excel VBA で処理中断(DoEvents...
-
VBA メッセージボックスを自動...
-
【C#】 あるイベントから別イ...
-
VBA、UserFormを前面に出力して...
-
ASP.NETでのメッセージ画面を出...
-
Excel VBA 自動的に閉じるMsgBox
-
スロットゲームのプログラミング
-
キーボード入力、マウス操作を...
-
<input type="file">タグで「キ...
-
Excelのワークシートに行を挿入...
-
ボタンが押された事を検知する...
-
VB6 コマンドボタン クリック...
-
VCでウエイトをミリ秒でかけ...
おすすめ情報