You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MFC属性页中直接调用或触发OnPsnHelp事件

方案1:直接调用OnPsnHelp函数(最简洁,无额外消息开销)

你可以在属性页的OnHelpInfo实现中手动构造PSN_HELP所需的参数,直接调用现有OnPsnHelp方法,完全不需要重复写帮助调用逻辑:

BOOL CCalendarSettingsGooglePage::OnHelpInfo(HELPINFO* pHelpInfo)
{
    // 构造PSN_HELP通知所需的NMHDR参数
    NMHDR hdr = {0};
    hdr.hwndFrom = GetParentSheet()->m_hWnd; // PSN_HELP默认由属性表窗口发出
    hdr.code = PSN_HELP;
    LRESULT res = 0;

    // 直接调用现有的帮助处理逻辑
    OnPsnHelp(&hdr, &res);

    // 拦截F1消息,不再传递给基类处理
    return TRUE;
}

方案2:发送标准WM_NOTIFY消息触发PSN_HELP流程

如果你希望走MFC标准的消息通知流程,可以给当前属性页的父窗口(属性表)发送PSN_HELP通知:

BOOL CCalendarSettingsGooglePage::OnHelpInfo(HELPINFO* pHelpInfo)
{
    NMHDR hdr = {0};
    hdr.hwndFrom = m_hWnd;
    hdr.idFrom = GetDlgCtrlID();
    hdr.code = PSN_HELP;
    GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&hdr);
    return TRUE;
}

你之前调用SendMessage(WM_COMMAND, ID_HELP)报错的原因

MFC默认的ID_HELP命令处理逻辑会尝试加载标准的WinHelp格式(.hlp)帮助文件,你的项目使用自定义的HTML帮助,没有为ID_HELP绑定自定义的处理函数,所以触发了默认的错误提示。如果你想走命令触发的方式,只需要在属性页/属性表的消息映射中添加ON_COMMAND(ID_HELP, 你的帮助处理函数)的绑定即可。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:24:02