2013-04-08 37 views
5

従来のMFCアプリケーションでメンテナンスを行っています。ヘルプダイアログの[印刷]ボタンを無効にする必要があります。プリンタがシステムに接続されていないため、ユーザーがヘルプウィンドウの[印刷]ボタンを押すとアプリケーションがクラッシュします。HtmlHelpの[印刷]ボタンを無効にする

コードは、ちょうどWindowsのヘルプダイアログを表示するために、標準的なHtmlHelpAメソッドを使用しています。

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ヘルプチームは、プリンタがマシンに接続されていない場合をテストしました。実際には、私は彼らの開発マシンにおそらくプリンタが接続されていないと確信しています。 *他の*印刷ボタンがクリックされると、システムがクラッシュしますか? –

+0

あなた以外のアプリケーションのヘルプの中で印刷しようとすると、HTMLヘルプがクラッシュしますか? –

+0

私はそれも変だと思う。これは組み込みシステム(WES7)であり、メモ帳やワードパッドなどの標準的なレイアウトのアプリケーションは含まれていないため、別のアプリを見つけるのは難しいです。 – Frecklefoot

答えて

6

次のようにして、[印刷]ボタンなしであなたのCHMヘルプファイルを表示することができます:あなたのCHMファイルに定義されたHTMLヘルプビューアのパラメータを含むHH_WINTYPE構造体へのポインタを取得するHH_GET_WIN_TYPEコマンドで

  • コールHtmlHelpを。
  • 返される構造体をコピーします。返された構造体を直接変更することはできません。
  • の値を除外するように構造体のメンバを変更します(fsToolBarFlags)。
  • 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

+1

CHMファイルを印刷するユーザーは、オプションボタンをクリックし、ポップアップメニューから「印刷」を選択することに注意してください。 "Options"ボタンも削除することができます: 'wt.fsToolBarFlags&=〜(HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif

関連する問題