Почему ID_FILE_NEW не передается в CWinApp? - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь вызвать 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 (если возможно).

...