Как перейти с :: WinHelp на CHM?

У меня большой унаследованный проект на 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 ответ


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

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

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

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

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

В классе 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; }
}