アプリ版:「スタンプのみでお礼する」機能のリリースについて

イベント取得に苦戦しております。

環境は、
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件)

>何か他の方法で、取得して、既存の処理を損なうことなく動作することは、


>できるのでしょうか?

メッセージハンドラ内でCWnd::Default()を呼ぶのではだめですか?
サブクラス化しなくてもデフォルト・ウィンドウ・プロシージャが呼ばれる
はずですが...
http://msdn.microsoft.com/ja-jp/library/ww9f7hst …
    • good
    • 0
この回答へのお礼

返答ありがとうございます。

上記の通りCWnd::Default()が呼ぶと既存の処理が行われました。
有難う御座います。

お礼日時:2009/02/23 09:28

>何か他の方法で、取得して、既存の処理を損なうことなく動作することは、できるのでしょうか?



メッセージマップでは、受け取ったメッセージはデフォルトのウィンドゥプローシジャ関数に渡されないので、既存のデフォルト処理は行われません。

メニューバーを付けたメインのフレームウィンドゥをサブクラス化し、ウィンドゥプローシジャ関数を乗っ取る必要があります。

#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);
(中略)
    • good
    • 0

> 正規の動作が予想のごとくできませんでした


とは どのような動作なのでしょう

選択した 項目のウィンドウをActiveにしたいってことでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A