覆盖默认F1 Windows帮助行为

覆盖默认F1 Windows帮助行为,windows,winapi,mfc,winhelp,Windows,Winapi,Mfc,Winhelp,我有一个简单的MFC应用程序,我想自定义应用程序提供的帮助按钮功能。单击F1或“帮助”按钮时,默认情况下会打开Windows帮助支持页面。如何禁用此默认行为并使其不显示任何内容 所谓不显示,是指不显示默认的windows支持页面。理想情况下,当我按F1键或单击“帮助”按钮时,它不会打开任何窗口 //Free the string allocated by MFC at CWinApp startup. //m_pszHelpFilePath is the member variable of

我有一个简单的MFC应用程序,我想自定义应用程序提供的帮助按钮功能。单击F1或“帮助”按钮时,默认情况下会打开Windows帮助支持页面。如何禁用此默认行为并使其不显示任何内容

所谓不显示,是指不显示默认的windows支持页面。理想情况下,当我按F1键或单击“帮助”按钮时,它不会打开任何窗口

//Free the string allocated by MFC at CWinApp startup. 
//m_pszHelpFilePath is the member variable of CWinApp that stores the 
//location to default help window.
//initialize it to an empty string just to be extra sure that default windows 
//support page location is never found.
//This needs to be set before CWinApp::InitInstance() is called.

free((void*)m_pszHelpFilePath);
m_pszHelpFilePath = _tcsdup(_T(""))
在MainFrame.cpp中,声明消息映射:

BEGIN_MESSAGE_MAP(MainFrame, CWinApp)
ON_MESSAGE(WM_COMMANDHELP, OnCommandHelp)
END_MESSAGE_MAP()
然后,调用
OnCommandHelp()
,这是一个消息处理程序,在禁用模式下用于处理F1

LRESULT  MainFrame::OnCommandHelp(WPARAM wParam, LPARAM lParam)
{
    CWnd *pWnd = GetFocus();
    if (pWnd != NULL)
    {
        CWinApp* theApp = AfxGetApp();
        CString helpFilePath = theApp->m_pszHelpFilePath;
        // we have a control with the focus, quit help display
        ::WinHelp(m_hWnd, helpFilePath, HELP_QUIT, NULL);
        return TRUE;
    }
    return FALSE;        // let default handling process it
}
此处称为,它启动Windows帮助(Winhelp.exe)并传递指示应用程序请求的帮助性质的附加数据<代码>帮助\u退出作为其参数之一,关闭请求的默认windows帮助支持页面

另外,不要忘记在MainFrame.h中声明
OnCommand帮助()

afx_msg LRESULT OnCommandHelp(WPARAM wParam, LPARAM lParam);

2006年3月15日-微软宣布WinHelp将被弃用。在与MVP的讨论中,微软帮助团队今天宣布WinHelp将被弃用(逐步淘汰)。WinHelp的架构使得我们必须从头重写它,以满足Vista代码标准。考虑到Vista中还有另外两个帮助系统,这种方法毫无意义

有关更多信息,请参见您的需求:

以下案文引自:

帮助引擎支持

Microsoft致力于在Windows平台上提供帮助和支持技术,并将继续为软件开发人员研究新的解决方案。以下信息阐明了Windows Vista和Windows Server代号“Longhorn”中对四种Microsoft帮助技术的支持:Windows帮助、HTML帮助1.x、帮助和支持中心以及帮助平台客户端

Windows帮助-WinHlp32.exe

Windows帮助WinHlp32.exe是一个帮助程序,已随以Microsoft Windows 3.1操作系统开始的Microsoft Windows版本提供。需要Windows帮助程序(WinHlp32.exe)来显示扩展名为“.HLP”的32位帮助内容文件。 Windows Vista和Windows Server代码名为“Longhorn”的Windows帮助已被弃用。若要在Windows Vista和Windows Server代码名为“Longhorn”的Windows Server中查看扩展名为.HLP的32位帮助文件,您需要从Microsoft下载中心下载并安装WinHlp32.exe。 Microsoft强烈建议软件开发人员停止在Vista中使用Windows帮助应用程序。鼓励发布依赖.HLP文件的程序的软件开发人员将其帮助体验转换为其他帮助文件格式,如CHM、HTML或XML。您还需要将调用从WinHelp()API更改为新的内容源。有几种第三方工具可用于帮助作者将内容从一种格式转换为另一种格式

HTML帮助1.x(HH.exe)

Microsoft HTML Help 1.x(HH.exe)是一个帮助系统,包含在从Windows 98开始的Windows版本中。显示扩展名为.CHM的已编译帮助文件需要HTML帮助。
HTML帮助将在Windows Vista和Windows服务器代号“Longhorn”中提供。但是,只会对引擎进行关键更新。对于Windows Vista和Windows Server代号为“Longhorn”的HTML帮助引擎或未来的Windows版本,将不会向其添加新功能或功能改进。

否。这就是我当时的处境。我不想显示默认的windows支持页面。也许我没有很好地解释这个问题。但我的意图是,当我按F1或单击“帮助”按钮时,它不应该做任何事情(这意味着不显示默认的窗口支持页)。此外,我没有任何100或1000的代表点数。我不在乎从中获得“分数”。只是想帮助任何可能面临同样问题的人。因为我花了很多时间试图弄明白这一点。另外,它是如何做到的呢?是的,它会调用WinHelp,但这是怎么回事?如果你看一下参数,它使用的是HELP_QUIT,它退出了默认的窗口支持页面。我已经测试过了,它的效果非常好。正如@David提到的,WinHelp是20世纪的一个帮助系统。您需要将WinHelp转换为HTMLHelp。您发布为答案的解决方案最好只抛弃应用程序的上下文相关帮助。看一看。请在询问之前搜索StackOverflow。为什么不让您的处理程序什么都不做并返回
TRUE
?对!希望“显示”其帮助文件的用户。拥有.hlp项目并希望有可靠的信息显示方式的人。他们肯定应该使用HTMLHelp()。你说得对。例如,WinHelp()不应用于帮助_CONTEXTPOPUP或其他调用,因为不支持该格式。但对于这个问题,您要求我首先将Windows默认帮助项目转换为HTML帮助视图项目格式。只是为了不显示该格式?当我不想显示.hlp项目时,为什么我需要转换为“正确”格式?在任何情况下,您都不必迁移WinHelp=>HTMLHelp-这只是一个从WinHelp中清除MFC项目的建议。哦,我明白了。我现在就试试。谢谢你的建议。我的荣幸-真的很老的帮助创作的东西-作为我。当答案有帮助时,请检查答案,欢迎投票。有一个愉快的周末。