2013-04-08 7 views
5

Ich führe Wartungsarbeiten an einer Legacy-MFC-Anwendung durch. Wir müssen die Schaltfläche Drucken im Hilfe-Dialog deaktivieren. Es ist kein Drucker mit dem System verbunden und die Anwendung stürzt ab, wenn der Benutzer im Hilfefenster auf die Schaltfläche Drucken klickt.Schaltfläche "Drucken" in HtmlHelp deaktivieren

Der Code verwendet einfach die Standard HtmlHelpA Methode, um die Windows-Hilfe-Dialog aufzurufen:

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

ich gefunden habe Informationen, die wir auf die Schaltfläche Drucken mit einigen Code in der Hilfe HTML Sheet unterdrücken kann (http://www.sagehill.net/docbookxsl/HtmlHelp.html) . Aber das würde eine Neukompilierung der Hilfedatei erfordern, und das würde ich lieber nicht tun. Ich fand auch einige Informationen, die besagt, dass Sie den HTML-Hilfe-Viewer anpassen können, indem Sie die HH_WINTYPE-Struktur jedes Bereichs bearbeiten, aber keine Informationen darüber, wie Sie das tatsächlich tun (http://msdn.microsoft.com/en-us/library/ms524435%28v=vs.85%29.aspx).

Gibt es eine Möglichkeit, diese Schaltfläche Drucken im HTML-Hilfe-Viewer programmatisch zu deaktivieren?

+1

* "Es gibt keinen Drucker an das System angeschlossen und die Anwendung abstürzt, wenn der Benutzer auf die Schaltfläche Druck im Hilfefenster drückt. "Das kommt mir seltsam vor. Sicherlich hat das HTML-Hilfe-Team für den Fall getestet, dass kein Drucker mit dem Computer verbunden war. Tatsächlich wette ich, dass ihre Dev-Maschinen wahrscheinlich keinen Drucker hatten, der an sie angeschlossen war. Stürzt das System ab, wenn auf * andere * Drucktasten geklickt wird? –

+0

Stürzt die HTML-Hilfe ab, wenn Sie versuchen, mit Hilfe einer anderen Anwendung als Ihrer zu drucken? –

+0

Ich denke, es ist auch komisch. Es ist schwierig, eine andere App zum Drucken zu finden, da dies ein eingebettetes System (WES7) ist und nicht das Standardlayout von Apps wie Notepad oder WordPad enthält. – Frecklefoot

Antwort

6

Sie können Ihre CHM-Hilfedatei ohne die Schaltfläche Druck angezeigt werden wie folgt:

  • Anruf HtmlHelp mit dem HH_GET_WIN_TYPE Befehl einen Zeiger auf eine HH_WINTYPE Struktur zu erhalten, den HTML Help Viewer Parameter enthält in Ihrer CHM-Datei definiert.
  • Kopieren Sie die zurückgegebene Struktur. (Das direkte Ändern der zurückgegebenen Struktur funktioniert nicht.)
  • Ändern Sie das fsToolBarFlags Element der Struktur, um den Wert HHWIN_BUTTON_PRINT auszuschließen.
  • Übergeben Sie die modifizierte HH_WINTYPE Struktur zurück an die HtmlHelp Funktion mit dem HH_SET_WIN_TYPE Befehl.

Beispiel C++ Code *:

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); 
} 

Ich weiß fast nicht C++, so ist es sehr Amateur Code. Bitte frei, es zu bearbeiten und zu verbessern.

Weitere Beispiele für die Verwendung HH_WINTYPE, HH_GET_WIN_TYPE und HH_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

Ich denke, genau das habe ich gesucht; Ich werde es versuchen. Vielen Dank! – Frecklefoot

+1

Es sollte beachtet werden, dass Benutzer, die eine CHM-Datei drucken möchten, auf die Schaltfläche Optionen klicken und im Popup-Menü "Drucken" auswählen. Vielleicht möchten Sie auch die Schaltfläche "Optionen" entfernen: 'wt.fsToolBarFlags & = ~ (HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif