0

根据 MSDN:

CPropertySheet 中的帮助仅受 F1 键和帮助按钮支持。默认情况下,帮助按钮出现在应用程序框架中。无需用户干预。当用户在属性表中添加每个页面的帮助信息时,帮助机制会在单击帮助按钮时自动显示该页面的帮助信息。

我认为对于CMFCPropertySheet. 所以我首先开始尝试处理处理WM_HELPINFO程序:

void COtherSettingsEmailInfoPage::HtmlHelp(DWORD_PTR dwData, UINT nCmd)
{
    HtmlHelp((DWORD_PTR)_T("HelpOptionsEmail.html"), HH_DISPLAY_TOPIC);

    //CMFCPropertyPage::HtmlHelp(dwData, nCmd);
}

没用。然后我添加了一个IDHELP按钮点击处理程序:

void COtherSettingsEmailInfoPage::OnHelp()
{
    HtmlHelp((DWORD_PTR)_T("HelpOptionsEmail.html"), HH_DISPLAY_TOPIC);
}

没用。

那么当用户按下工作表上的帮助按钮时,我应该如何显示正确的帮助主题?使困惑。

更新

我在工作表和页面上都试过这个 - 不起作用:

BOOL COtherSettingsEmailInfoPage::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
    LPPSHNOTIFY lppsn = (LPPSHNOTIFY)lParam;

    if (lppsn->hdr.code == PSN_HELP)
    {
        AfxMessageBox(_T("Boo2"));
    }

    return CMFCPropertyPage::OnNotify(wParam, lParam, pResult);
}
4

1 回答 1

0

最后搞定了这件事。

首先,OI 对我的应用程序有一个小问题,即CWinApp使用了错误的文件名。这是当我对我的应用程序进行更改时引起的。所以我把它固定在InitInstance

CString strHelp = GetProgramPath();
strHelp += _T("MeetSchedAssist.CHM");
free((void*)m_pszHelpFilePath);
m_pszHelpFilePath = _tcsdup(strHelp);

接下来,我必须在CMFCPropertySheet类中添加一个通知处理程序:

标题

afx_msg void OnPsnHelp(NMHDR* hdr, LRESULT* res);   // Our help button message handler

来源

ON_NOTIFY(PSN_HELP, 0, &COtherSettingsEmailInfoPage::OnPsnHelp)

...
...

void COtherSettingsEmailInfoPage::OnPsnHelp(NMHDR* hdr, LRESULT* res)
{
    HtmlHelp((DWORD_PTR)_T("HelpOptionsEmail.htm"), HH_DISPLAY_TOPIC);
}

现在它正确显示了帮助主题。

于 2017-07-23T18:25:52.093 回答