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 に答える