在HtmlHelp中禁用“打印”button

我在旧的MFC应用程序上执行维护。 我们需要禁用帮助对话框中的打印button。 没有连接到系统的打印机,并且如果用户在帮助窗口中按下“打印”button,应用程序将会崩溃。

该代码只是使用标准的HtmlHelpA方法来调出Windows帮助对话框:

 void CNiftyView::OnHelp() { CString csHelpFile; csHelpFile.Format( "%s/NiftyHelp.chm", NiftyDoc::GetHelpPath() ); ::HtmlHelpA( m_hWnd, csHelpFile, HH_HELP_CONTEXT, IDH_NIFTY_SECTION ); } 

我发现我们可以用帮助HTML样式表( http://www.sagehill.net/docbookxsl/HtmlHelp.html )中的一些代码来禁止“打印”button。 但是,这将需要重新编译帮助文件,我宁愿不这样做。 我还发现了一些信息,说您可以通过操作每个窗格的HH_WINTYPE结构来自定义HTML帮助查看器,但没有关于实际执行情况的信息( http://msdn.microsoft.com/zh-cn/library/ms524435%28v = vs.85%29.aspx )。

有没有办法以编程方式禁用HTML帮助查看器中的打印button?

您可以显示您的CHM帮助文件没有打印按钮,如下所示:

  • 使用HH_GET_WIN_TYPE命令调用HtmlHelp以获取指向包含CHM文件中定义的HTML帮助查看器参数的HH_WINTYPE结构的指针。
  • 复制返回的结构。 (直接修改返回的结构将不起作用。)
  • 修改结构的fsToolBarFlags成员以排除HHWIN_BUTTON_PRINT值。
  • 使用HH_SET_WIN_TYPE命令将修改后的HH_WINTYPE结构传递回HtmlHelp函数。

示例C ++代码*:

 HH_WINTYPE *pwt = NULL; LPCWSTR pszFile = L"MyFile.chm"; LPCWSTR pszWin = L"MyFile.chm>Main"; // "Main" is the window type defined in the CHM file // Get the window type definition HWND hWndHelp = HtmlHelp(NULL, pszWin, HH_GET_WIN_TYPE, (DWORD) &pwt); if (pwt) { // Copy the contents of the returned structure HH_WINTYPE wt = *pwt; // Remove the "Print" toolbar button from the window definition wt.fsToolBarFlags &= ~HHWIN_BUTTON_PRINT; wt.cbStruct = sizeof(wt); // force the correct size // Set the new window type hWndHelp = HtmlHelp(NULL, pszFile, HH_SET_WIN_TYPE, (DWORD) &wt); // Display help hWndHelp = HtmlHelp(NULL, pszFile, HH_DISPLAY_TOPIC, NULL); } 

我几乎不知道C ++,所以这是非常业余的代码。 请随意编辑并改进它。

更多使用HH_WINTYPEHH_GET_WIN_TYPEHH_SET_WIN_TYPE
如何以编程方式创建三窗格的HTML帮助窗口
如何从托管的Visual C#应用程序使用非托管HTML帮助API