Как обработать кнопку справки на 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);
}
Теперь он правильно показывает раздел справки.