2013-04-24 6 views
0

기존 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); 
} 

내 메시지 박스가 결코 나타나지 않습니다 때문에 호출하기 아니에요 알고있다 (I이 디버깅하려면 Visual Studio를 사용할 수 없습니다; 메시지 상자 만 해당). 또한 메시지 맵 및 이와 유사한 구현을 사용하여 CMDIFrameWnd에 쐐기를 넣으려고했지만 성공하지 못했습니다 (도움말 메뉴 항목과 다른 항목이 여기에 구현되어 잘 작동 함). 내 자신의 사용자 지정 도움말 기능에 연결하기 위해 필요한 모든 아이디어?

+0

당신이 ID_HELP 다른 곳에서 처리되지 확실해? 귀하의 애플 리케이션은 일반적으로 명령 메시지를 얻을 수있는 마지막 것입니다. http://msdn.microsoft.com/en-us/library/shfzay75(v=vs.90).aspx –

+0

다른 메뉴 항목을 추가하십시오. ID_HELP2, 시도하고 함정. 그게 작동하면 뭔가 다른 ID_HELP를 가로 채고 있습니다. – snowdude

답변

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); 
} 
+0

고마워, 그게 F1을위한 완벽한 일했습니다. 불행히도 Help | 도움말은 여전히 ​​MFC에서 처리합니다. 아직도 우회하는 법을 찾아야 해. – Frecklefoot