CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

chm上下文帮助问题

楼主wdh924(秦歌)2004-11-03 17:31:52 在 C++ Builder / 基础类 提问

#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

相关问题

  • 如何在CHM格式帮助中实现上下文敏感帮助?
  • 用TWinControl的HelpContext属性实现上下文敏感的帮助时可以用*.chm格式的文件吗?
  • 在BCB中使用*.chm作为上下文敏感的帮助文件到底要怎么做啊?
  • 添加上下文帮助的问题
  • 关于在VC.NET中使用上下文帮助的问题,即调用chm文件的问题.急用,希望大侠们来帮帮!
  • 如何在delphi5中使用上下文敏感的htmlhelp(*.chm).
  • 如何在CHM文件中添加上下文ID
  • BCB5有没有做上下文敏感的帮助的插件?
  • 关于上下文相关的帮助文件
  • 如何给帮助主题设置上下文编号

关键词

  • api
  • null
  • helpfilename
  • htmlhelp
  • stopic
  • htmlhelpa
  • hhelp
  • grade
  • ansistring
  • chm

得分解答快速导航

  • 帖主:wdh924
  • tccsdn
  • cnrealboy
  • zzlong

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo