CMyView からメッセージをCMainFrameへ送り、ハンドラ関数を実行させたい。 – プログラミング – Home

CMyView からメッセージをCMa...
 
通知
すべてクリア

[解決済] CMyView からメッセージをCMainFrameへ送り、ハンドラ関数を実行させたい。


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

OS XP, VC++ 6.0 PRO.

***CMyView 側のコーデイング

int CMyView::OnViewChangeMsgPost(void)
{
 VERIFY(GetParent()->PostMessage(WM_COMMAND, MAKEWPARAM(ID_SO_NEW, 0),0));
return(0) ;
}

CMyViewは、SDIを選択すると自動生成されるView の派生クラスで、ここから
CMainFrame へメッセージを送り対応するハンドラ関数を起動させたいのですが、
ハンドラ関数が実行されません。どこか間違ってますでしょうか?
ちなみにCMyView の親ウインドウは、CMainFrameになるのでは、ないのでしょうか?

*** CMainFrame 側のコーデイング
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_COMMAND(ID_SO_NEW,OnNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

OnNew()
}
:
:
}


引用未解決
トピックタグ
みょーん
 みょーん
(@みょーん)
ゲスト
結合: 20年前
投稿: 2
 

ビューかドキュメントにそのコマンドのメッセージハンドラがありませんか?
あると横取りされてしまいます。

ttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vccore/html/_core_Command_Routing.asp


返信引用
WIZ
 WIZ
(@WIZ)
ゲスト
結合: 20年前
投稿: 15
 

VC6 のヘルプで、CWnd::OnCommand と MAKEWPARAM を調べた限り、提示のコードの
以下の部分の MAKEWPARAM の使い方が間違っているのではないかと思います。

> VERIFY(GetParent()->PostMessage(WM_COMMAND, MAKEWPARAM(ID_SO_NEW, 0),0));

正しくは MAKEWPARAM(0, ID_SO_NEW) だと思います。
# 試した訳ではないので、はずしていたらごめんなさい。


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

みょーんさん、WIZ さんありがとうございます。
動作から見るとWIZさんのご指摘は、あやまりで順番は、正しいようです。

みよーんさんのご指摘どおりで、MyView 内このメッセージと同じハンドラ関数がありま
した。
(私は、親ウインドウに送っているので、このMyView内のハンドラは、動作しないと考
えていましたが、みよーんさんのご指摘どおり横取りされているようです。)

みなさん、ありがとうございました。
かなり、考えていましたので、やっとの思いです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました