2013-04-08 118 views
5

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

的代码只是使用标准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) 。但是这需要重新编译帮助文件,我宁愿不这样做。我还发现了一些信息,说您可以通过操纵每个窗格的HH_WINTYPE结构来自定义HTML帮助查看器,但是没有关于您实际执行操作的信息(http://msdn.microsoft.com/en-us/library/ms524435%28v=vs.85%29.aspx)。

是否有某种方法以编程方式禁用HTML帮助查看器中的“打印”按钮?

+1

*“没有连接到系统和应用程序崩溃的打印机,如果用户按下帮助窗口的打印按钮。 “*这让我感到奇怪。当然,HTML帮助团队针对没有打印机连接到机器的情况进行了测试。事实上,我敢打赌他们的开发机器可能没有打印机。当其他*打印按钮被点击时,系统是否会崩溃? – 2013-04-08 22:06:02

+0

当您尝试在除您之外的其他应用程序的帮助下进行打印时,HTML帮助是否会崩溃? – 2013-04-09 07:42:14

+0

我觉得它也很奇怪。很难找到另一个应用程序来打印,因为这是一个嵌入式系统(WES7),并且不包含诸如记事本或写字板等应用程序的标准布局。 – Frecklefoot 2013-04-09 19:02:38

回答

6

您可以在不打印按钮显示您的CHM帮助文件如下:

  • 呼叫HtmlHelpHH_GET_WIN_TYPE命令来获得一个指向包含在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

更多的例子:
How To Programmatically Create a Tri-pane HTML Help Window
How to use the unmanaged HTML Help API from a managed Visual C# application

+0

我想这正是我正在寻找的;我会试一试。谢谢! – Frecklefoot 2013-04-09 18:41:43

+1

需要注意的是,想要打印CHM文件的用户将点击选项按钮并从弹出菜单中选择“打印”。您可能还想删除“选项”按钮:'wt.fsToolBarFlags&=〜(HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif 2015-08-28 14:46:51