2013-04-08 123 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