Как обработать кнопку справки на CMFCPropertySheet / CMFCPropertyPage?

По данным 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);
}

1 ответ

Решение

Получил это подозреваемый в конце.

Во-первых, у моего приложения была небольшая проблема, когда 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);
}

Теперь он правильно показывает раздел справки.

Другие вопросы по тегам