我正在維護舊的MFC應用程序。當用戶從應用程序頂部的主菜單中選擇幫助→幫助時,我需要調用我自定義的OnHelp()
。從我的研究中,我瞭解到MFC通常會自動截取這個命令並自己提供幫助文件。但是您可以覆蓋此命令並自行攔截此消息。我有這個在我的消息映射:MFC自定義HtmlHelp
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
中,並帶有消息映射和類似的實現,但都沒有成功(與「幫助」菜單項目中的不同項目在此處實現並且工作正常)。任何想法我需要做什麼來鉤入我自己的自定義幫助功能?
你肯定ID_HELP在其他地方沒有處理?你的應用通常是獲得命令消息的最後一個。 http://msdn.microsoft.com/en-us/library/shfzay75(v=vs.90).aspx – 2013-04-25 01:40:15
添加另一個菜單項,例如ID_HELP2,然後嘗試並捕獲它。如果那有效,那麼別的東西會攔截ID_HELP。 – snowdude 2013-04-25 10:04:07