MFC Custom HtmlHelp
Я занимаюсь обслуживанием устаревшего приложения MFC. Когда пользователь выбирает "Справка" → "Справка" в главном меню в верхней части приложения, мне нужен пользовательский OnHelp()
быть названным. Из моего исследования я узнал, что MFC обычно перехватывает эту команду автоматически и вызывает сам файл справки. Но вы можете переопределить эту команду и перехватить это сообщение самостоятельно. У меня есть это в моей карте сообщений:
BEGIN_MESSAGE_MAP(MyApp, MyBaseApp)
//{{AFX_MSG_MAP(MyApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_HELP, OnHelp)
//}}AFX_MSG_MAP
// Standard file based document commands
END_MESSAGE_MAP()
"О" OnAppAbout()
вызывается, но не мой OnHelp()
(MFC все еще перехватывает это и вызывает помощь самостоятельно). Моя реализация довольно проста:
void MyApp::OnHelp()
{
// This never gets called
MessageBox( NULL, "HtmlHelp: MyApp", "Hey", MB_OK );
CString csHelpFile;
csHelpFile.Format( "%s/MyHelp.chm", MyDoc::GetHelpPath() );
::HtmlHelp(
NULL,
csHelpFile,
HELP_WM_HELP,
NULL );
}
Я знаю, что он не вызывается, потому что мой MessageBox никогда не появляется (я не могу использовать Visual Studio для отладки этого; только окна сообщений). Я также пытался втиснуть его в CMDIFrameWnd
с картой сообщений и аналогичной реализацией, но безуспешно (здесь реализован элемент, отличный от пункта меню Справка, и он работает нормально). Любая идея, что мне нужно сделать, чтобы подключиться к моей собственной функции справки?
1 ответ
Вам нужно добавить ON_WM_HELPINFO()
в карту сообщений вашего CMainFrame. определять afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
в заголовочном файле для основного фрейма и внедрите его в файл cpp:
BOOL CMainFrame::OnHelpInfo(HELPINFO* pHelpInfo)
{
#ifdef _DEBUG
MessageBox( NULL, "HtmlHelp: MyApp", "Hey", MB_OK );
#endif
CString csHelpFile;
csHelpFile.Format( "%s/MyHelp.chm", MyDoc::GetHelpPath() );
::HtmlHelp(
NULL,
csHelpFile,
HELP_WM_HELP,
NULL );
return CFrameWnd::OnHelpInfo(pHelpInfo);
}