我正在对旧版 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
没有成功(此处实现了帮助菜单项的不同项目并且工作正常)。知道我需要做什么才能连接到我自己的自定义帮助功能吗?