2013-04-08 16 views
5

Wykonuję konserwację starszych aplikacji MFC. Musimy wyłączyć przycisk Drukuj w oknie dialogowym Pomoc. Nie ma drukarki podłączonej do systemu, a aplikacja ulega awarii, jeśli użytkownik naciśnie przycisk Drukuj w oknie pomocy.Wyłącz przycisk Drukuj w HtmlHelp

Kod prostu wykorzystuje standardową metodę HtmlHelpA aby przywołać okno Pomocy systemu Windows:

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

znalazłem informację, że możemy stłumić przycisk Drukuj z jakiegoś kodu w arkuszu stylów Pomoc HTML (http://www.sagehill.net/docbookxsl/HtmlHelp.html) . Ale to wymagałoby rekompilacji pliku pomocy, a ja wolałbym tego nie robić. Znalazłem również informacje, które mówią, że możesz dostosować widok HTML Help Viewer, manipulując strukturą HH_WINTYPE każdego panelu, ale nie ma informacji, jak to zrobić (http://msdn.microsoft.com/en-us/library/ms524435%28v=vs.85%29.aspx).

Czy jest jakiś sposób na wyłączenie tego przycisku Drukuj w przeglądarce pomocy HTML programowo?

+1

* "Nie ma drukarka jest podłączona do systemu i awarii aplikacji, jeśli użytkownik naciśnie przycisk Drukuj w oknie Pomocy. "* To wydaje mi się dziwne. Z pewnością zespół pomocy HTML przetestował przypadek, w którym do drukarki nie podłączono drukarki. W rzeczywistości, założę się, że ich maszyny do dystrybucji prawdopodobnie nie miały podłączonej drukarki. Czy system się zawiesi po kliknięciu * innych * przycisków drukowania? –

+0

Czy Pomoc HTML ulega awarii podczas próby drukowania w ramach innej aplikacji niż Twoja? –

+0

Myślę, że to też jest dziwne. Trudno znaleźć inną aplikację do drukowania, ponieważ jest to system wbudowany (WES7) i nie zawiera standardowego układu aplikacji, takich jak Notatnik lub WordPad. – Frecklefoot

Odpowiedz

6

można wyświetlić pliku pomocy CHM bez przycisku Print następująco:

  • połączenia HtmlHelp pomocą polecenia HH_GET_WIN_TYPE aby uzyskać wskaźnik do struktury HH_WINTYPE zawierającym parametry HTML Help Viewer zdefiniowane w pliku CHM.
  • Skopiuj zwróconą strukturę. (Zmiana bezpośrednio zwróconej struktury nie będzie działać.)
  • Zmodyfikuj element fsToolBarFlags struktury, aby wykluczyć wartość HHWIN_BUTTON_PRINT.
  • Prześlij zmodyfikowaną strukturę HH_WINTYPE z powrotem do funkcji HtmlHelp za pomocą komendy HH_SET_WIN_TYPE.

Przykład C++ kod *:

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

ja prawie nie znam C++, więc jest to kod bardzo amatorskie. Zachęcamy do edycji i poprawy.

Więcej przykładów wykorzystania HH_WINTYPE, HH_GET_WIN_TYPE i 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

Myślę, że właśnie tego szukałem; Dam temu szansę. Dzięki! – Frecklefoot

+1

Należy zauważyć, że użytkownicy, którzy chcą drukować plik CHM, klikną przycisk Opcje i wybrną "Drukuj" z wyskakującego menu. Możesz również usunąć przycisk "Opcje": 'wt.fsToolBarFlags & = ~ (HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif