Я пытаюсь вызвать ID_FILE_NEW на моем верхнем уровне CWinAppEx
из функции в CTreeCtrl
.
В этом обсуждении предлагается отправить сообщение в мое главное окно:
Триггер MFC ID_FILE_OPEN команда
Однако, когда я отправляю сообщение, я не вижу результата (aновая пара документ / вид не создается).
Из моего CTreeCtrl
класса:
void CLCPViewTree::NewDocument()
{
CWnd * main = AfxGetMainWnd();
main->PostMessage(WM_COMMAND, ID_FILE_NEW, 0);
}
Проходя по коду, я подтвердил, что «main» указывает на правильное окно (окно, наследуемое CMDIFrameWndEx).
Кроме того, команда / сообщение ID_FILE_NEW
обрабатывается и корректно принимается моим основным приложением;запуск через обычное меню Файл-> Новое приводит к открытию новой пары документ / представление.
Я предполагаю, что отправляю сообщение в фрейм-окно, а не в основное приложение, иframe-window игнорирует сообщение.
Для справки: я знаю, что могу добиться аналогичного результата, переопределив OnFileNew
в моем CWinAppEx
и выставив его как публичный метод. Меня больше интересует выяснение того, почему ID_FILE_NEW
не достигает моего CWinAppEx
, как я ожидал.
Карта сообщений в моем CMDIFrameWndEx
полученном классе:
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
ON_WM_CREATE()
ON_COMMAND(ID_SETTINGS_SHOWSELECTOR, ShowSelectorPane)
ON_COMMAND(ID_SETTINGS_SHOWSELECTOR32780, ShowSelectorPane)
END_MESSAGE_MAP()
И карта сообщений в моем CWinAppEx
-обработанном классе:
BEGIN_MESSAGE_MAP(CLCP_GatewayApp, CWinAppEx)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
END_MESSAGE_MAP()
И, если я могу ответить на второстепенный вопрос: как обычно отлаживать проблемы передачи сообщений MFC? Существуют ли какие-либо инструменты, которые помогают, или вы просто проходите через процедуры маршрутизации сообщений платформы?
Я хочу знать, как определить первопричину в проблеме, описанной выше, без необходимости проходить через это слишкоммного внутреннего кода MFC (если возможно).