2013-04-08 2 views
5

Я выполняю обслуживание на устаревшем приложении MFC. Нам нужно отключить кнопку «Печать» в диалоговом окне «Справка». Принтер не подключен к системе, и приложение выходит из строя, если пользователь нажимает кнопку «Печать» в окне справки.Отключить кнопку печати в HtmlПомощь

код использует только стандартный 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 Help (http://www.sagehill.net/docbookxsl/HtmlHelp.html) , Но для этого потребуется перекомпилировать файл справки, и я бы предпочел не делать этого. Я также нашел некоторую информацию, в которой говорится, что вы можете настроить HTML Help Viewer, манипулируя структурой HH_WINTYPE каждой панели, но никакой информации о том, как вы на самом деле это делаете (http://msdn.microsoft.com/en-us/library/ms524435%28v=vs.85%29.aspx).

Есть ли способ отключить эту кнопку Print в средстве просмотра справки HTML программно?

+1

* "Там нет принтер, подключенный к системе и сбоев приложений, если пользователь нажимает на кнопку Печать в окне справки. «Это кажется мне странным. Разумеется, команда справки HTML проверила на случай, когда к машине не подключен принтер. На самом деле, я готов поспорить, что их dev-машины, вероятно, не подключили к ним принтер. Сбой системы при нажатии * других * кнопок печати? –

+0

Сбой справки HTML при попытке распечатать с помощью какого-либо другого приложения, кроме вашего? –

+0

Я думаю, что это тоже странно. Трудно найти другое приложение для печати, потому что это встроенная система (WES7) и не содержит стандартную компоновку таких приложений, как «Блокнот» или «WordPad». – Frecklefoot

ответ

6

Вы можете отображать файл справки CHM без кнопки печати следующим образом:

  • вызов HtmlHelp с помощью команды HH_GET_WIN_TYPE получить указатель на HH_WINTYPE структуру, содержащую параметры HTML просмотра справки, определенные в файле CHM.
  • Скопируйте возвращенную структуру. (Изменение возвращенной структуры напрямую не будет работать.)
  • Измените элемент структуры fsToolBarFlags, чтобы исключить значение HHWIN_BUTTON_PRINT.
  • Передайте модифицированную структуру HH_WINTYPE обратно в функцию HtmlHelp с помощью команды HH_SET_WIN_TYPE.

код Пример 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_WINTYPE, HH_GET_WIN_TYPE и 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

Я думаю, что это именно то, что я искал; Я попробую. Благодаря! – Frecklefoot

+1

Следует отметить, что пользователи, которые хотят распечатать CHM-файл, будут нажимать кнопку «Параметры» и выберите «Печать» из всплывающего меню. Вы также можете удалить кнопку «Параметры»: 'wt.fsToolBarFlags & = ~ (HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif

Смежные вопросы