我在C++中有一个很大的遗留项目。它仍然可以很好地编译Borland C++ 5.02,没有任何问题,除了一个问题:帮助系统不工作。在内部,它调用API函数
::WinHelp(0, GetHelpFile().c_str(), HELP_CONTEXT, helpFileContextId);
::WinHelp(0, GetHelpFile().c_str(), HELP_QUIT, 0);然后似乎依赖于Windows来管理帮助系统。当然,对于Windows10,它不起作用。
我已经成功地将HLP文件转换为CHM格式。当我单击新的.CHM文件时,它将正常打开。
问题是:有没有一种简单的方法可以将遗留代码切换到.CHM文件,而不需要太多重写?
我知道我可以将所有出现的::WinHelp替换为::HtmlHelp,但这似乎需要大量重写。有没有更简单的方法?
发布于 2020-03-23 18:31:17
如果您真的成功地将包含上下文相关帮助的旧WinHelp文件转换为CHM,那么大部分工作已经完成。
我不是一个C++程序员-更多的工作是帮助创作和其他编程语言,例如Visual Basic (.net)。但是我记得一些老东西..。
你可以在User Assistance for your programs上找到在Windows上连接HTMLHelp的教程。
请注意,我没有尝试这一点,但希望将其作为一个想法传递给您的需求。搜索"Override the Default Context Help Behavior“并查看代码部分以了解您的要求
在主框架类中,使用类向导创建一个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; }
}https://stackoverflow.com/questions/60807968
复制相似问题