chm上下文帮助问题
#include "htmlhelp.h"
static AnsiString HelpFileName = "..\\Grades.chm";
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString sTopic;
HelpFileName = ExpandFileName(HelpFileName);
sTopic = HelpFileName + "::/"+ "Grades\\Grade_Edit_Dialog.htm";
HtmlHelp (Application->Handle, sTopic.c_str(), HH_DISPLAY_TOPIC, 0);
}
就是出不来怎么回事?
问题点数:30、回复次数:7Top
1 楼tccsdn(紫乐)回复于 2004-11-03 18:41:44 得分 5
UPTop
2 楼wdh924(秦歌)回复于 2004-11-04 08:39:38 得分 0
哎,昨天搞了一个下午了,哪位大侠教教我啊Top
3 楼cnrealboy(中国男人)回复于 2004-11-04 09:00:09 得分 20
[Linker Error] Unresolved external 'HtmlHelpA' referenced from E:\TEST\UNIT1.OBJ
我的没有办法调试你的这段代码。Top
4 楼zzlong()回复于 2004-11-04 09:22:25 得分 5
不会,upTop
5 楼wdh924(秦歌)回复于 2004-11-04 10:38:57 得分 0
[Linker Error] Unresolved external 'HtmlHelpA' referenced from
似乎是调用HtmlHelp时要用到,定义一下即可
HWND WINAPI HtmlHelpA
(
HWND hwndCaller,
LPCSTR pszFile,
UINT uCommand,
DWORD dwData
)
{
if (HTMLHelpA_Proc != NULL)
return HTMLHelpA_Proc (hwndCaller, pszFile, uCommand, dwData);
else
return NULL;
}
另外如果要调试的话,得先作个chm文件,并了解其主题htm的路径,比如
主题Grade_Edit_Dialog.htm放在Grades文件夹下,
则sTopic = HelpFileName + "::/"+ "Grades\\Grade_Edit_Dialog.htm";
Top
6 楼wdh924(秦歌)回复于 2004-11-04 14:58:43 得分 0
我发一下源码吧:
先加一个hhelp.cpp网上下的如下:
hhelp.h
//---------------------------------------------------------------------------
#ifndef hhelpH
#define hhelpH
#include "htmlhelp.h" // from HTMLHelp SDK
//---------------------------------------------------------------------------
void LoadHTMLHelp (void);
void UnloadHTMLHelp (void);
#endif
hhelp.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <registry.hpp>
#include "hhelp.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
typedef HWND WINAPI (*HTMLHELP_API_ANSI_TYPE)(HWND, LPCSTR, UINT, DWORD);
typedef HWND WINAPI (*HTMLHELP_API_UNICODE_TYPE)(HWND, LPCWSTR, UINT, DWORD);
static HINSTANCE LibHandle = NULL;
static HTMLHELP_API_ANSI_TYPE HTMLHelpA_Proc = NULL;
static HTMLHELP_API_UNICODE_TYPE HTMLHelpW_Proc = NULL;
// Gets full path to HHCTRL.OCX from the registry
static AnsiString GetHTMLHelpPath (void)
{
// HTMLHelp registry key path.
static const char * hhPathRegKey =
"CLSID\\{adb880a6-d8ff-11cf-9377-00aa003b7a11}\\InprocServer32";
AnsiString sResult;
TRegistry *Reg;
sResult = "";
Reg = new TRegistry;
Reg->RootKey = HKEY_CLASSES_ROOT;
if (Reg->OpenKeyReadOnly (hhPathRegKey))
{
sResult = Reg->ReadString ("");
Reg->CloseKey ();
}
delete Reg;
return sResult;
}
/*
setup HTML Help API function interface.
sets LibHandle = 0 if API function not available
*/
void LoadHTMLHelp (void)
{
AnsiString OcxPath;
OcxPath = GetHTMLHelpPath ();
if (FileExists (OcxPath))
{
LibHandle = LoadLibrary (OcxPath.c_str());
if (LibHandle != 0)
{
HTMLHelpA_Proc = (HTMLHELP_API_ANSI_TYPE)GetProcAddress (LibHandle, "HtmlHelpA");
HTMLHelpW_Proc = (HTMLHELP_API_UNICODE_TYPE)GetProcAddress (LibHandle, "HtmlHelpW");
}
}
}
void UnloadHTMLHelp (void)
{
if (LibHandle != 0)
{
FreeLibrary (LibHandle);
HTMLHelpA_Proc = NULL;
HTMLHelpW_Proc = NULL;
}
}
HWND WINAPI HtmlHelpA
(
HWND hwndCaller,
LPCSTR pszFile,
UINT uCommand,
DWORD dwData
)
{
if (HTMLHelpA_Proc != NULL)
return HTMLHelpA_Proc (hwndCaller, pszFile, uCommand, dwData);
else
return NULL;
}
HWND WINAPI HtmlHelpW
(
HWND hwndCaller,
LPCWSTR pszFile,
UINT uCommand,
DWORD dwData
)
{
if (HTMLHelpW_Proc != NULL)
return HTMLHelpW_Proc (hwndCaller, pszFile, uCommand, dwData);
else
return NULL;
}
然后在Unit1上放一个按钮:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "hhelp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
static AnsiString HelpFileName = "..\\Grades.chm";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString sTopic;
HelpFileName = ExpandFileName(HelpFileName);
sTopic = HelpFileName + "::/"+ "Grades\\Grade_Edit_Dialog.htm";//Secondary_Windows.htm>Second";
HtmlHelp(Application->Handle, sTopic.c_str(), HH_DISPLAY_TOPIC, 0);
}
//---------------------------------------------------------------------------
大侠帮我调试下??
Top
7 楼wdh924(秦歌)回复于 2004-11-04 15:32:21 得分 0
问题已找到,在工程文件下少写LoadHTMLHelp ();
谢谢帮顶!Top




