CFrameWndExメインフレームウィンドウに基づいて、VS2008(およびVS2010)SDIプロジェクトでWM_MENUSELECTメッセージを処理しようとしています。CFrameWndExウィンドウでWM_MENUSELECTが処理されない
私のようなものになりVS2008ウィザード(単一の文書、「MFCの標準」、オプションの「古典的なメニューを使用」)から、単純なプロジェクト(後WM_MENUSELECTメッセージを追加しました)作成:
class CMainFrame : public CFrameWnd
{
///...
public:
afx_msg void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
};
をし、
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_WM_MENUSELECT()
END_MESSAGE_MAP()
///...
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)
{
CFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
}
のCMainFrameにブレークポイントを入れたときにこれは、作品::メニューは(毎回その場合)を使用した場合、それがトリガされOnMenuSelect
交換
class CMainFrame : public CFrameWndEx
{
///....
public:
afx_msg void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
};
と
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
ON_WM_CREATE()
ON_WM_MENUSELECT()
END_MESSAGE_MAP()
///....
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)
{
CFrameWndEx::OnMenuSelect(nItemID, nFlags, hSysMenu);
}
メッセージを(、オプションの「メニューバーを使用して、ツールバー」またはオプションの単一の文書、「MFCの標準」でウィザードを使用して新しいプロジェクトを作成することによって)CFrameWndExによってCFrameWndの決して誘発されません。
私はCFrameWndExを使用してプロジェクトを厳密に最小限に抑えていますが、メッセージを受け取ることはできません。
理由は何ですか?ヒントはいつでも歓迎します。おかげさまで
いいえ、クラスは正しいです(私は主な質問を編集します)。 – Max