2013-04-08 11 views
5

Sto eseguendo la manutenzione su un'applicazione MFC legacy. Abbiamo la necessità di disabilitare il pulsante Stampa nella finestra di dialogo della Guida. Non c'è nessuna stampante collegata al sistema e l'applicazione si blocca se l'utente preme il pulsante Stampa nella finestra di aiuto.Disattiva pulsante Stampa in HtmlHelp

Il codice utilizza solo il metodo standard HtmlHelpA per aprire la finestra di dialogo Guida di Windows:

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

ho trovato informazioni che siamo in grado di sopprimere il pulsante Stampa con un po 'di codice nel foglio di stile HTML Help (http://www.sagehill.net/docbookxsl/HtmlHelp.html) . Ma ciò richiederebbe la ricompilazione del file di aiuto, e preferirei non farlo. Ho anche trovato alcune informazioni che dicono che è possibile personalizzare il Visualizzatore della Guida HTML manipolando la struttura HH_WINTYPE di ogni riquadro, ma non le informazioni su come lo si fa effettivamente (http://msdn.microsoft.com/en-us/library/ms524435%28v=vs.85%29.aspx).

C'è un modo per disabilitare il pulsante Stampa nel visualizzatore della Guida HTML in modo programmatico?

+1

* "non v'è alcuna stampante collegata al sistema e l'applicazione si blocca se l'utente preme il pulsante Stampa nella finestra di aiuto. "* Questo mi sembra strano. Sicuramente il team di assistenza HTML ha testato il caso in cui nessuna stampante era collegata alla macchina. In effetti, scommetto che le loro macchine di sviluppo probabilmente non avevano una stampante collegata a loro. Il sistema si blocca quando si fa clic su * altri * pulsanti di stampa? –

+0

La Guida HTML si arresta in modo anomalo quando si tenta di stampare con l'aiuto di qualche altra applicazione? –

+0

Penso che sia strano anche io. È difficile trovare un'altra app da stampare perché si tratta di un sistema incorporato (WES7) e non contiene il layout standard di app come Blocco note o WordPad. – Frecklefoot

risposta

6

È possibile visualizzare il file di aiuto CHM, senza il pulsante di stampa nel modo seguente:

  • chiamata HtmlHelp con il comando HH_GET_WIN_TYPE per ottenere un puntatore ad una struttura HH_WINTYPE contenente i parametri HTML Help Viewer definiti nel file CHM.
  • Copia la struttura restituita. (La modifica della struttura restituita non funzionerà direttamente.)
  • Modificare il membro fsToolBarFlags della struttura per escludere il valore HHWIN_BUTTON_PRINT.
  • Passare alla struttura HH_WINTYPE modificata per la funzione HtmlHelp utilizzando il comando HH_SET_WIN_TYPE.

codice di esempio 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); 
} 

io quasi non lo so C++, quindi è il codice molto amatoriale. Sei libero di modificarlo e migliorarlo.

Altri esempi di utilizzo HH_WINTYPE, HH_GET_WIN_TYPE e 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

Penso che questo sia esattamente quello che stavo cercando; Lo proverò. Grazie! – Frecklefoot

+1

Si noti che gli utenti che desiderano stampare il file CHM fare clic sul pulsante Opzioni e selezionare "Stampa" dal menu a comparsa. Potresti voler rimuovere anche il pulsante "Opzioni": 'wt.fsToolBarFlags & = ~ (HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif