Отключить кнопку "Печать" в HtmlHelp

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

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

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

1 ответ

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

  • Вызов HtmlHelp с HH_GET_WIN_TYPE Команда, чтобы получить указатель на HH_WINTYPE структура, содержащая параметры HTML Help Viewer, определенные в вашем файле 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:
Как программно создать окно HTML-справки с тремя областями
Как использовать неуправляемый API справки HTML из управляемого приложения Visual C#

Другие вопросы по тегам