Отключить кнопку "Печать" в 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#