Я пытаюсь обработать сообщение WM_MENUSELECT в проекте SDI VS2008 (и VS2010), основанном на окне основного кадра CFrameWndEx.
Я создаю простой проект из мастера 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, она срабатывает при использовании меню (в этом случае каждый раз)
Замена CFrameWnd на CFrameWndEx (или путем создания нового проекта с помощью мастера с параметрами отдельного документа «Стандарт MFC», «использовать меню и панель инструментов» (
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);
}
Сообщениеникогда не сработает.
Я даже сократил проект, используя CFrameWndEx, до строгого минимума, и до сих пор не могу получить сообщение.
Есть идеи почему?Советы, подсказки всегда приветствуются.Благодарю.Макс.