覆盖默认的F1 Windows帮助行为

时间:2017-10-11 20:48:28

标签: windows winapi mfc winhelp

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

通过什么都不显示,我的意思是不显示默认的Windows支持页面。理想情况下,当我按F1或点击帮助按钮时,它应该打开没有窗口。

2 个答案:

答案 0 :(得分:2)

2006年3月15日 - MS宣布WinHelp将被弃用。在与MVP讨论期间,Microsoft帮助团队今天宣布将弃用WinHelp(逐步淘汰)。 WinHelp的架构是这样的,我们必须从头开始重写它以符合Vista代码标准。鉴于我们在Vista中有另外两个帮助系统,这种方法没有意义。

有关详细信息,请参阅您的需求:

以下文字引自:

The Windows Vista and Windows Server 2008 Developer Story: Application Compatibility Cookbook

帮助引擎支持

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

Windows帮助-WinHlp32.exe

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

HTML帮助1.x(HH.exe)

Microsoft HTML帮助1.x(HH.exe)是从Windows 98开始的Windows版本中包含的帮助系统。需要HTML帮助才能显示带有.CHM文件扩展名的已编译帮助文件。 HTML帮助将在Windows Vista和Windows Server Codename“Longhorn”中提供。但是,只会对引擎进行重要更新。对于Windows Vista和Windows Server Codename“Longhorn”或未来的Windows版本,HTML帮助引擎不会添加任何新功能或功能改进。

答案 1 :(得分:1)

//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中,声明MessageMap:

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
}

此处调用WinHelp(),它启动Windows帮助(Winhelp.exe)并传递指示应用程序请求的帮助性质的其他数据。 HELP_QUIT作为其参数之一,关闭所请求的默认窗口帮助支持页面。

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

afx_msg LRESULT OnCommandHelp(WPARAM wParam, LPARAM lParam);