如何在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
相关产品推荐
相关产品推荐

