zoukankan      html  css  js  c++  java
  • 为应用程序制作帮助文件

      本文简要介绍如何为应用程序制作一个帮助文件。

      我们需要借助的工具软件清单如下:

      (1)支持Rtf格式的文字处理软件,例如 Office 中的Word。

      (2)Help WorkShop。(由VC6携带安装的一个工具)

      步骤1:用文字处理软件编辑你的帮助文件(*.rtf),这个文件定义你的帮助文件中的一些主题(Topic),每个topic实际上就是用WinHelp显示的一个页面。这一部本质上就属于文字处理了,只是你需要在保存的时候选择rtf格式。需要特别掌握的是以下几点:

     

      每个topic结束后追加一个分页符。 在每个topic的最前面可以添加以下脚注(添加的脚注请使用以下编号):

      #:你的topic的一个唯一标识符,它是必须的,也是做链接时需要用到的。

      K:定义该topic的关键字,用英文分号分割;

      $:定义该topic的标题,它将显示在winhelp的历史窗口,查找等地方。

      制作链接时,把链接的文本用双下划线格式,然后在文本后面添加一段隐藏文本,输入要链接的topic的唯一标示符。

      制作出来的rtf文档效果如下图所示: 下图显示的是帮助文件的目录,里面包含了到每个topic的链接。

      

      下图显示的是为某个topic添加的脚注:

      

      (2)创建一个Help项目:打开 Microsoft help workshop 软件, 点击File -> New ->选择 Help Project;

      建立好项目以后,我们可以使用右侧的那些按钮去设置这个项目的一些信息,过程很简单,这里就不详细介绍了, 细节可以查阅 help workshop 的帮助文件。设置好的项目如下图所示:

      

      (3)先把项目保存,然后我们用help workshop 创建帮助文件的内容文件(*.cnt)。 使用菜单 File->New-> 选择help Contents。然后我们添加目录(Head,一本书的图标)和Topic(文件图标),使用 MoveLeft 和 MoveRight 按钮可以修改缩进。做好的 Contents 效果如下图所示:

      

      (4)把 contents文件保存,然后打开刚才的help Project, 在Options的 Files 标签页中填加 Contents 文件。如下图所示:

      

      然后我们点击“ Save and compile ” 按钮编译帮助文件,编译成功以后,通过菜单 File -> Run Winhelp 可以看到我们做的帮助文件的效果如下图所示:

      

      帮助文件基本做好了,现在我们为我们的应用程序添加对帮助的支持,首先我们在资源中打开窗口的菜单资源,在帮助菜单下添加下面几项:

      帮助主题(IDM_HELPCONTENTS), 内容(IDM_HELPCONTENTS),搜索帮助(IDM_HELPSEARCH),然后我们在窗口过程中处理WM_COMMAND消息时添加对这几个菜单的处理,相关代码如下:

    code_wndproc
    //获取和程序位于同一个目录下文件的绝对路径

    void GetAppFolderFileName(char *buffer, char* shortFileName)
    {
        
    char* pChar = NULL;
        GetModuleFileName(NULL, buffer, MAX_PATH);
        pChar 
    = strrchr(buffer, '\\');
        
    if(pChar != NULL)
        {
            strcpy(pChar 
    + 1, shortFileName);
        }
    }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        WORD ctlId, wmEvent;
        
    switch (message) 
        {
        
    case WM_HELP: //F1
            {
                
    //获取和程序位于同一个目录下文件的绝对路径
                char buffer[MAX_PATH];
                GetAppFolderFileName(buffer, 
    "RFCARD.HLP");
                WinHelp (hWnd, buffer, HELP_CONTENTS,(DWORD)
    0);

            }
            
    break;
        
    case WM_COMMAND:
            ctlId    
    = LOWORD(wParam); 
            wmEvent 
    = HIWORD(wParam); 
            
    switch (ctlId)
            {
            
    case IDM_HELPTOPICS: // "Help Topics..."
                {                
                    
    char buffer[MAX_PATH];
                    GetAppFolderFileName(buffer, 
    "RFCARD.HLP");
                    WinHelp (hWnd, buffer, HELP_FINDER,(DWORD)
    0);
                }
                
    break;
            
    case IDM_HELPCONTENTS: // "Contents"
                {
                    
    char buffer[MAX_PATH];
                    GetAppFolderFileName(buffer, 
    "RFCARD.HLP");
                    WinHelp (hWnd, buffer, HELP_CONTENTS,(DWORD)
    0);
                }
                
    break;
            
    case IDM_HELPSEARCH: // "Search for Help On..."
                {
                    
    char buffer[MAX_PATH];
                    GetAppFolderFileName(buffer, 
    "RFCARD.HLP");
                    WinHelp(hWnd, buffer, HELP_PARTIALKEY, (DWORD)(LPSTR)
    "");
                }
                
    break;
            
    default:
                
    return DefWindowProc(hWnd, message, wParam, lParam);
            }
            
    break;
        }
    }


      然后我们重新编译我们的应用程序,成功以后,可以在应用程序处于前台时按下F1键(程序将收到WM_HELP消息),或者点击帮助下面的菜单,查看效果可能如下图所示:

       

      

      

      本文参考以下资料:

      (1)崔晓阳,实例简述Hlp帮助文件的制作,《农业网络信息》2007年第9期。

      (2)MSDN:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dnwui/html/msdn_generic.htm

        Robert B. Hess, Generic: Anatomy of a Simple Win32 Application, Windows User Interface Technical Articles, October 17, 1994; 

  • 相关阅读:
    修改数据库表的字符集
    mysql 修改表名的方法:sql语句
    内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]
    Linux与Windows编译器的区别
    点到线段的距离计算方法
    利用海伦公式求点到线段距离的算法
    MYSQL导入导出.sql文件
    Mysql导出表结构及表数据 mysqldump用法
    玩扑克牌学概率论
    程序员面试题精选100题(40)-扑克牌的顺子
  • 原文地址:https://www.cnblogs.com/hoodlum1980/p/1645977.html
Copyright © 2011-2022 走看看