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()
}
:
:
}
ビューかドキュメントにそのコマンドのメッセージハンドラがありませんか?
あると横取りされてしまいます。
ttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vccore/html/_core_Command_Routing.asp
VC6 のヘルプで、CWnd::OnCommand と MAKEWPARAM を調べた限り、提示のコードの
以下の部分の MAKEWPARAM の使い方が間違っているのではないかと思います。
> VERIFY(GetParent()->PostMessage(WM_COMMAND, MAKEWPARAM(ID_SO_NEW, 0),0));
正しくは MAKEWPARAM(0, ID_SO_NEW) だと思います。
# 試した訳ではないので、はずしていたらごめんなさい。
みょーんさん、WIZ さんありがとうございます。
動作から見るとWIZさんのご指摘は、あやまりで順番は、正しいようです。
みよーんさんのご指摘どおりで、MyView 内このメッセージと同じハンドラ関数がありま
した。
(私は、親ウインドウに送っているので、このMyView内のハンドラは、動作しないと考
えていましたが、みよーんさんのご指摘どおり横取りされているようです。)
みなさん、ありがとうございました。
かなり、考えていましたので、やっとの思いです。