Как перейти с :: WinHelp на CHM? - PullRequest
0 голосов
/ 23 марта 2020

У меня большой унаследованный проект на C ++. Он по-прежнему прекрасно компилируется с Borland C ++ 5.02 без проблем, кроме одной: справочная система не работает. Внутренне он вызывает функции API

::WinHelp(0, GetHelpFile().c_str(), HELP_CONTEXT, helpFileContextId);
::WinHelp(0, GetHelpFile().c_str(), HELP_QUIT, 0);

, а затем, по-видимому, полагается на Windows для управления справочной системой. Естественно, с Windows 10 это не работает.

Я успешно преобразовал файл HLP в формат CHM. Новый файл .CHM открывается ОК, когда я нажимаю на него.

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

Я понимаю что я могу заменить все вхождения :: WinHelp на :: HtmlHelp, но это, кажется, много переписывает. Есть ли более простой способ?

1 Ответ

1 голос
/ 23 марта 2020

Если вам действительно удалось превратить старый файл WinHelp, включая контекстно-зависимую справку, в CHM, большая часть работы уже выполнена.

Я не программист C ++ - больше работаю над созданием справки и другие языки программирования, например Visual Basi c (. net). Но я вспоминаю некоторые старые вещи ...

Вы найдете учебник по подключению HTMLHelp к Windows по Помощь пользователям для ваших программ .

  • Пожалуйста, ознакомьтесь с первым разделом разделов, озаглавленным «Подключение справки к вашим программам».
  • Учебное пособие (PDF) озаглавлено «Подключение справки HTML к программам C ++ / MF C».

Обратите внимание, я не пробовал это, но хотел бы передать это как идею для ваших нужд. Найдите «Переопределить поведение контекстной справки по умолчанию» и проверьте код в соответствии с вашими требованиями

В классе Main Frame создайте функцию WinHelp (да, WinHelp, а не HtmlHelp) с помощью мастера классов:

void CMainFrame::WinHelp(DWORD dwData, UINT nCmd)
{
CWinApp* theApp = AfxGetApp();
CString helpFilePath = theApp->m_pszHelpFilePath;
switch ( dwData ) {
case HIDR_MAINFRAME:
case HIDR_MFCWIZTYPE:
case HIDD_ABOUTBOX:
case HIDD_TESTDLG:
//Topics that need to go into the main window.
HtmlHelp(m_hWnd, helpFilePath, HH_HELP_CONTEXT, dwData);
break;
case WHATEVER
//Topics that need to go into a different secondary window
...
break;
default:
//All the rest are popups
HtmlHelp(m_hWnd, helpFilePath, HH_HELP_CONTEXT, dwData);
break; }
}
...