イベント取得に苦戦しております。
環境は、
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
ダイアログボックスで指定したサイズどおり表示されない
C言語・C++・C#
-
5
MFC ダイアログ上のID取得について
C言語・C++・C#
-
6
MFCのダイアログのリソースが更新されない
C言語・C++・C#
-
7
CMainFrameクラスの使い方
C言語・C++・C#
-
8
MFCでハンドルを取得するには
C言語・C++・C#
-
9
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
10
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
11
コンボボックスのドロップダウンリストが表示されない
C言語・C++・C#
-
12
MFCでOnPaintのタイミング
C言語・C++・C#
-
13
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
14
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
15
VC++にてボタン等のサイズ取得
C言語・C++・C#
-
16
MFC ポップアップメニューのチェック表示について
C言語・C++・C#
-
17
メニューをグレー表示でなく非表示にするには?
C言語・C++・C#
-
18
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
19
VC++でUTF-8のファイルを出力したい
C言語・C++・C#
-
20
【C++/CLI.NET】コンボボックスの値の設定・取得
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ASP.NETでのメッセージ画面を出...
-
Timerのカウントダウンのしかた...
-
<input type="file">タグで「キ...
-
C#で処理中画面を表示したい。
-
マウスのクリックを無視したい
-
エクセルVBAでクリップボード内...
-
VBA、UserFormを前面に出力して...
-
Application.ScreenUpdating=Fa...
-
C# 何かキーを押すとことで処理...
-
B列に特定の文字列が入っている...
-
【C#】 あるイベントから別イ...
-
Excel VBA で処理中断(DoEvents...
-
Excel VBA 自動的に閉じるMsgBox
-
HTA(HTMLアプリケーション)にて...
-
ファンクションキーのキャンセ...
-
VC++6.0 CDateTimeCtrl の暴走...
-
「キャンセル」ボタン付きの処...
-
[VC++] AfxBeginThreadで生成し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスのボタン名変更
-
VBSの処理中一旦処理を止めて再...
-
VBA kernel32 の意味
-
VBSで応答不要のメッセージボッ...
-
VBA メッセージボックスを自動...
-
ACCESS側からEXCELの書式を設定...
-
Application.ScreenUpdating=Fa...
-
エクセルVBAでクリップボード内...
-
Excel VBA で処理中断(DoEvents...
-
【C#】 あるイベントから別イ...
-
Excel VBA 自動的に閉じるMsgBox
-
VBA、UserFormを前面に出力して...
-
ASP.NETでのメッセージ画面を出...
-
マウスのクリックを無視したい
-
EXCEL VBA「Application.Displa...
-
B列に特定の文字列が入っている...
-
MFCのワーカースレッドとUIスレ...
-
VCでウエイトをミリ秒でかけ...
-
DoEvents
-
「キャンセル」ボタン付きの処...
おすすめ情報