处理联机帮助

您所在的位置:网站首页 windows帮助窗口按类别区分应选标签是什么 处理联机帮助

处理联机帮助

2024-07-09 19:37| 来源: 网络整理| 查看: 265

处理联机帮助 项目06/13/2023

联机帮助可以有多种形式,从详细的概念信息到快速定义。 本主题包含以下各节:

关于帮助 帮助请求 帮助显示和 Windows 帮助 使用帮助 在对话框中提供帮助 设置辅助帮助窗口的外观 关于帮助

在线帮助中随时提供用户友好应用程序的一个重要元素。 Windows 提供的函数和消息与 Windows 帮助应用程序结合使用时,可以轻松地在应用程序中实现联机帮助。 本概述讨论支持联机帮助的 Windows 元素。 它介绍如何使用这些元素为用户提供请求帮助的方法,并说明如何使用 Windows 帮助应用程序显示帮助。

帮助请求

大多数基于 Windows 的应用程序以各种形式提供联机帮助信息,从解释应用程序功能用途的概念帮助到提供应用程序用户界面中各个元素的快速定义的弹出帮助。 使用函数和消息为用户提供各种方法来请求访问此信息。 以下部分介绍这些帮助请求。

帮助菜单

大多数应用程序通过在“main”窗口中包括“帮助”菜单,为用户提供对帮助信息的访问权限。 当用户从 “帮助 ”菜单中选择某个项时,相应的窗口过程将收到标识所选项 的WM_COMMAND 消息。 应用程序通过显示相应的帮助信息(例如帮助主题列表、索引或应用程序简介)进行响应。

键盘上的帮助

Windows 通过每当用户按 F1 键时通知应用程序,使用户能够从键盘访问帮助信息。 当用户按下键时,系统会向具有键盘焦点的窗口发送WM_HELP消息。 例如,如果窗口是子窗口 (对话框中的控件) , 则 DefWindowProc 函数会将消息传递给父窗口。 如果在按 F1 时菜单处于活动状态,系统会将消息发送到与菜单关联的窗口。 应用程序通过显示与具有焦点或处于活动状态的窗口、控件或菜单关联的帮助信息来响应。 例如,如果用户在对话框中选择一个控件并按 F1,则应用程序将显示该控件的帮助信息。

WM_HELP 的 lParam 参数是指向 HELPINFO 结构的指针,该结构包含有关请求帮助的项的详细信息。 使用此信息来确定要显示的帮助主题。 HELPINFO 结构还包括用户按下键时鼠标光标的坐标。 可以使用此信息根据鼠标光标的位置提供帮助。

鼠标帮助

Windows 通过每当用户单击鼠标右键或在单击“问题 (?) ”按钮后单击窗口、控件或菜单时通知应用程序,为用户提供鼠标帮助信息的访问权限。 应用程序通过显示与给定窗口、控件或菜单关联的帮助信息进行响应。

当用户单击鼠标右键时,系统会发送 WM_CONTEXTMENU 消息。 单击的窗口接收消息。 如果窗口是子窗口(如 控件), DefWindowProc 函数会将消息传递给父窗口。 WM_CONTEXTMENU消息指定鼠标光标的坐标。 x 坐标位于 lParam 参数的低位字中,y 坐标位于高序字中。 如果用户单击了控件,则 wParam 参数是接收单击的控件的句柄。

当用户在单击窗口标题栏中出现的“问题 ( ?) ”按钮后单击窗口中的项目时,系统会发送WM_HELP消息。 创建窗口时,可以通过在 CreateWindowEx 函数中指定WS_EX_CONTEXTHELP样式,将“问题”按钮添加到标题栏。 WM_HELP 的 lParam 参数是指向 HELPINFO 结构的指针,该结构包含有关请求帮助的项的详细信息,包括用户单击鼠标按钮时鼠标光标的坐标。

建议仅在对话框中使用“问题”按钮。 过去,应用程序通过在对话框中提供“帮助”按钮,为用户提供了对有关对话框的 帮助 信息的访问权限。 不再建议使用此方法。 请改用“问题”按钮。

帮助显示和 Windows 帮助

应用程序收到帮助请求后,应显示相应的帮助信息。 由于 Windows 帮助应用程序提供一致的用户界面,因此建议应用程序使用 Windows 帮助而不是其他方法。 若要指示 Windows 帮助显示帮助信息,应用程序使用 WinHelp 函数,指定详细信息,例如要显示的信息以及要在其中显示的信息窗口的形式。 以下部分介绍如何使用 WinHelp 显示帮助信息。

帮助文件

若要查看帮助信息,必须在调用 WinHelp 函数时指定帮助文件。 帮助文件必须具有 Windows 帮助 (.hlp) 文件格式和一个或多个主题。 每个主题都是一个不同的信息单元,例如概念说明、一组说明、图片、术语表定义等。 主题必须唯一标识,以便 Windows 帮助可以在请求时找到它们。 在内部,Windows 帮助使用主题标识符来查找主题,但应用程序通常使用上下文标识符 (唯一整数值) 来指定要显示的主题。 帮助文件作者必须将上下文标识符显式映射到用于生成帮助文件的项目文件的 [MAP] 部分中的主题标识符。

指定帮助文件但不指定路径时, WinHelp 会在帮助目录或 PATH 环境变量指定的目录中查找帮助文件。 此外, WinHelp 还可以找到名称列在以下注册表位置的帮助文件:

HKEY_LOCAL_MACHINE    Software       Microsoft          Windows             Help

若要利用注册表,必须创建一个与帮助文件同名的值名称。 分配给该名称的值必须是帮助文件所在的目录。

如果 WinHelp 找不到给定的帮助文件,则会显示一个对话框,允许用户指定帮助文件的位置。 由于 WinHelp 将位置信息保存在注册表中,因此不会再次询问同一帮助文件的位置。

有关如何创作和生成帮助文件的详细信息,请参阅随开发工具一起提供的文档。

启动 Windows 帮助

以下示例使用 WinHelp 函数启动 Windows 帮助应用程序,并将帮助文件打开到其内容主题。

HWND hwnd; // main window handle BOOL bResult // for checking Boolean function result bResult = WinHelp(hWnd, "WINNT.HLP", HELP_CONTENTS, 0L);

下一个示例将打开用户帮助文件,在文件中搜索与关键字 (keyword) 字符串关联的主题,然后显示该主题。

HWND hwnd; // main window handle BOOL bResult // for checking Boolean function result bResult = WinHelp(hWnd, "WINNT.HLP", HELP_KEY, (DWORD) "finding topics"); “帮助主题”对话框

可以通过使用 HELP_FINDER 命令调用 WinHelp 函数来显示“帮助主题”对话框。 “ 帮助主题 ”对话框允许用户通过查看主题的标题、与主题关联的关键字或在主题中找到的字词和短语来选择要显示的主题。 当用户从“帮助”菜单中选择命令(如“帮助主题”)时,应用程序通常会显示此对话框。 如果用户在应用程序中没有特定窗口、控件或菜单具有焦点或处于活动状态时按键,应用程序也可能显示此对话框。

过去,应用程序将 HELP_CONTENTS 和 HELP_INDEX 命令与 WinHelp 函数一起使用,以显示帮助文件的 Contents 主题和关键字 (keyword) 索引。 不再建议使用这些命令。 请改用 HELP_FINDER 命令。

信息主题

可以通过使用 HELP_CONTEXT 命令调用 WinHelp 函数并指定主题的上下文标识符来显示特定主题。 应用程序通常使用 HELP_CONTEXT 命令来响应用户对包含概念信息或过程帮助的主题的请求,而不是有关特定控件或菜单的信息。 在这种情况下,用户可能会继续浏览帮助文件以查找相关信息,然后再返回应用程序。

HELP_CONTEXT 命令调用 Windows 帮助的常规实例,使用户能够在帮助文件中查找其他主题。 它通常显示main帮助窗口,其中包括标题栏、系统菜单、最小化和最大化按钮、main菜单、可选导航栏、大小调整边框和工作区。 所选主题的文本显示在工作区中,用户可以使用main窗口中的热链接或导航按钮浏览帮助文件。 Windows 帮助的常规实例还可用于在一个或多个辅助窗口而不是main窗口中显示帮助。

弹出主题

通过使用 HELP_WM_HELP 或 HELP_CONTEXTMENU 命令调用 WinHelp 函数,可以显示包含特定控件或菜单信息的弹出主题。 这些命令在相应控件或菜单附近的弹出窗口中显示主题。 若要让用户立即返回以在应用程序中工作,只要用户按下某个键或单击鼠标左键,弹出窗口就会被销毁。

处理控件窗口WM_HELP消息时,请使用 HELP_WM_HELP 命令。 由于大多数控件将 WM_HELP 消息传递给 DefWindowProc 函数,因此相应的对话框过程 (或父窗口过程) 处理此消息。 对话框过程必须将控件和上下文标识符对的数组以及随WM_HELP消息一起传递的 HELPINFO 结构的 hItemHandle 成员中指定的控件句柄传递给 WinHelp,而不是提供特定的上下文标识符。 函数确定为其生成 WM_HELP 消息的控件的标识符,并使用匹配的上下文标识符显示相应的主题。

处理WM_CONTEXTMENU消息时,请使用 HELP_CONTEXTMENU 命令。 由于大多数控件将 WM_CONTEXTMENU 消息传递给 DefWindowProc 函数,因此相应的对话框过程 (或父窗口过程) 处理此消息。 过程指定控件和上下文标识符对的数组;它还在调用 WinHelp 时指定 wParam 参数中的句柄,以便函数可以从数组中选取适当的上下文标识符并显示相应的主题。 与 HELP_WM_HELP 命令不同,HELP_CONTEXTMENU首先在菜单中显示 “这是什么?” 命令。 如果用户选择命令, WinHelp 将显示主题。 否则,请求将被取消。

还可以通过使用 HELP_CONTEXTPOPUP 命令并指定主题的上下文标识符来显示弹出主题。 此命令类似于 HELP_CONTEXT 命令,但调用 HELP_WM_HELP 和 HELP_CONTEXTMENU 使用的 Windows 帮助弹出实例。 应用程序可以使用此命令来响应 WM_HELP 消息,以显示菜单和对话框中非控件窗口的帮助。 若要最有效地使用此命令,应用程序应为这些菜单和窗口分配上下文标识符。

可以将上下文标识符分配给应用程序中的任何窗口或菜单。 生成 WM_HELP 消息时,系统会在 HELPINFO 结构中包含传递到 WM_HELP 消息中父窗口的上下文标识符。 然后,父窗口可以将上下文标识符传递给 WinHelp 以显示请求的帮助主题。

使用 SetWindowContextHelpId 函数将上下文标识符分配给窗口或控件,使用 SetMenuContextHelpId 函数将上下文标识符分配给菜单。 可以使用 GetWindowContextHelpId 或 GetMenuContextHelpId 函数检索窗口或菜单 的 上下文标识符。

关键字搜索

可以通过为帮助文件中的主题分配关键字,使用户能够查找和查看主题。 关键字 (keyword) 只是与一个或多个主题关联的字符串。 Windows 帮助收集帮助文件中的所有关键字,将它们放在表中,并在 “帮助主题 ”对话框的“索引”列表中显示它们。 当用户选择关键字 (keyword) 时,Windows 帮助将显示关联的帮助主题,或者,如果有多个主题与关键字 (keyword) 相关联,则显示用户可以从中选择的主题列表。

在应用程序中,可以将 HELP_KEY、HELP_PARTIALKEY 或 HELP_MULTIKEY 命令与 WinHelp 函数结合使用,根据完整或部分关键字搜索和显示帮助主题。 指定命令、关键字 (keyword) 字符串、帮助文件和所有者窗口的句柄。 在所有情况下,如果找到单个匹配项, WinHelp 会显示相应的主题。 如果找到多个匹配项,该函数将显示“找到主题”对话框,用户可以选择要查看的主题。 如果未找到匹配项, WinHelp 将显示HELP_KEY和HELP_PARTIALKEY) 的索引列表 (,或者显示HELP_MULTIKEY) (错误消息。

应用程序可以通过用分号分隔关键字,在对 WinHelp 的单个调用中搜索多个关键字。 (为 Windows 版本 3 创建的帮助文件不支持搜索多个关键字。x) 如果指定的帮助文件具有包含 :Index 或 :Link 命令的 (.cnt) 文件的内容,则它还可以在多个帮助文件中搜索关键字。 使用 HELP_KEY 命令, WinHelp 搜索这些命令指定的所有文件中的关键字。 使用 HELP_MULTIKEY 和 HELP_PARTIALKEY 命令,函数将搜索除 :Link 命令指定的文件之外的所有文件。

默认情况下,Windows 帮助仅识别由帮助源文件中的 K 脚注字符标识的关键字 (keyword) 表。 可以通过在帮助源文件中添加 K 以外的脚注字符(具有关键字 (keyword) 定义)来指示 Windows 帮助创建其他关键字 (keyword) 表。 (脚注字符 A 保留。) 生成帮助文件时,必须使用项目文件的 [OPTIONS] 部分中的 MULTIKEY 语句定义任何其他关键字 (keyword) 表。

应用程序可以使用 HELP_SETINDEX 命令和 WinHelp 函数来指示 Windows 帮助在其索引列表中显示除 K 以外的关键字 (keyword) 表。 若要指示 Windows 帮助在备用关键字 (keyword) 表中搜索关键字 (keyword) ,应用程序可以使用 HELP_MULTIKEY 命令。 在传递给 WinHelp 的 MULTIKEYHELP 结构中指定关键字 (keyword) 和关键字 (keyword) 表。

当 WinHelp 显示主题时,它会在主题的“”>脚注指定的窗口中、内容文件中的 :Base 命令指定的窗口中或main窗口中显示该主题。 如果在调用 WinHelp 时,main窗口已打开到其他帮助文件,则函数会在搜索时隐藏main窗口。 在这种情况下,取消“找到的主题”和“帮助主题”对话框会关闭main窗口。

辅助帮助窗口

Windows 帮助应用程序的main窗口称为主窗口。 Windows 帮助还可以在辅助窗口中显示帮助主题。 与主帮助窗口不同,辅助窗口不包含菜单栏。 可以在辅助窗口中包括导航栏,并且可以向该栏添加按钮。 你还可以选择让 Windows 帮助自动调整辅助窗口的高度以适应主题。

必须在帮助项目文件的 [WINDOWS] 部分中定义辅助窗口,并提供每个窗口的名称以及初始大小和位置(可选)。 可以通过将尖括号 (>) 以及为辅助窗口定义的名称追加到帮助文件的名称,来指示 Windows 帮助应用程序在辅助窗口中显示主题。 然后将生成的字符串传递给 WinHelp 函数。

应用程序可以通过在调用 WinHelp 时指定 HELPWININFO 结构的地址和 HELP_SETWINPOS 命令来更改主窗口或辅助窗口的大小和位置。 HELPWININFO 指定窗口的名称及其新大小和位置。

培训卡帮助

使用训练卡帮助,应用程序可以显示一系列说明,以指导用户完成任务的步骤。 训练卡通常由说明特定步骤的文本和与 TCard 宏关联的按钮组成,这些按钮允许用户告诉应用程序接下来要执行的操作。 培训卡片只能在辅助窗口中显示,不得包含指向帮助文件中其他主题的热链接。

应用程序通过调用 WinHelp 函数并将 HELP_TCARD 命令与另一个命令(如 HELP_CONTEXT)结合使用来启动 Windows 帮助的训练卡实例。 随后,当用户单击训练卡中的按钮、单击分配给 TCard 宏的热点或关闭训练卡时,Windows 帮助会通过向应用程序发送WM_TCARD消息来通知应用程序。 wParam 参数标识按钮或用户操作,lParam 参数包含其他数据,其含义取决于 wParam 的值。

取消帮助

Windows 帮助要求应用程序显式取消帮助,以便它可以释放用于跟踪应用程序及其帮助文件的任何资源。 应用程序可以随时通过调用 WinHelp 函数并指定 HELP_QUIT 命令来执行此操作。 请注意,对于 Windows 帮助的弹出实例,情况并非如此。 应用程序不应尝试关闭弹出实例。

如果应用程序已调用 WinHelp,则必须在关闭其main窗口 (之前取消帮助,以响应main窗口中WM_DESTROY消息) 。 应用程序只需调用 WinHelp 一次即可取消帮助,无论它打开了多少个帮助文件。 在所有应用程序或 DLL 取消帮助之前,Windows 帮助将一直保持运行。

若要关闭 Windows 帮助的训练卡实例,必须在调用 WinHelp 时指定HELP_TCARD和HELP_QUIT命令。 如果用户先取消 Windows 帮助实例,应用程序不需要取消训练卡。 当用户取消训练卡实例时,Windows 帮助会发送WM_TCARD消息,并将 wParam 参数设置为 IDCLOSE 时通知应用程序。

使用帮助

本部分介绍如何为对话框提供上下文相关帮助,以及如何设置辅助帮助窗口的外观。

在对话框中提供帮助 设置辅助帮助窗口的外观 在对话框中提供帮助

若要在对话框中提供上下文相关帮助,必须创建一个由 DWORD 值对组成的数组。 每对中的第一个值是对话框中控件的标识符,第二个值是控件的帮助主题的上下文标识符。 数组应包含对话框中每个控件的一对标识符。

对话框过程必须处理 WM_HELP 和 WM_CONTEXTMENU 消息。 当用户按下键时,对话框过程会收到 WM_HELP ,当用户单击鼠标右键时 WM_CONTEXTMENU 。

WM_HELP 的 lParam 参数包含 HELPINFO 结构的地址。 此结构的 hItemHandle 成员标识用户为其请求帮助的控件。 必须将此句柄连同 HELP_WM_HELP 命令、帮助文件的名称和指向标识符数组的指针一起传递给 WinHelp 函数。 WinHelp 函数在数组中搜索指定控件的控件标识符,然后检索相应的帮助上下文标识符。 接下来,函数将帮助上下文标识符传递给 Windows 帮助,Windows 帮助将查找相应的主题并将其显示在弹出窗口中。 如果控件的标识符为 -1,系统会搜索作为制表位的下一个控件,然后使用其标识符查找帮助上下文标识符。 因此,请务必在资源文件中的控件之前放置静态文本。

调用 WinHelp 函数时,处理 WM_CONTEXTMENU 类似于处理 WM_HELP ,但有以下两个例外:

将 wParam 参数从 WM_CONTEXTMENU 传递,该参数是发送消息的控件的句柄。 指定 HELP_CONTEXTMENU 命令,而不是 HELP_WM_HELP。

HELP_CONTEXTMENU 命令会使 Windows 帮助在显示帮助主题之前显示菜单。 菜单是系统定义的。 它允许用户显示控件的帮助或显示 “帮助主题 ”对话框。

以下示例演示如何在对话框中实现上下文相关帮助。

LRESULT CALLBACK EditDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { // Create an array of control identifiers and context identifiers. static DWORD aIds[ ] = { ID_SAVE, IDH_SAVE, ID_DELETE, IDH_DELETE, ID_COPY, IDH_COPY, ID_PASTE, IDH_PASTE, 0,0 }; switch (uMsg) { case WM_HELP: WinHelp(((LPHELPINFO)lParam)->hItemHandle, "helpfile.hlp", HELP_WM_HELP, (DWORD)(LPSTR)aIds); break; case WM_CONTEXTMENU: WinHelp((HWND)wParam, "helpfile.hlp", HELP_CONTEXTMENU, (DWORD)(LPVOID)aIds); break; // Process other messages here. } return FALSE; } 设置辅助帮助窗口的外观

应用程序可以通过将HELP_SETWINPOS命令和 HELPWININFO 结构的地址传递给 WinHelp 函数来设置辅助帮助窗口的大小、位置和显示状态。 HELPWININFO 的成员指定要更改的窗口的名称以及窗口的新大小、位置和显示状态。

以下示例设置名为“wnd_menu”的辅助窗口的外观。 必须在帮助项目文件的 [WINDOWS] 部分中定义该名称。

BOOL DoWindowSize(VOID) { HANDLE hhwi; LPHELPWININFO lphwi; WORD wSize; char *szWndName = "wnd_menu"; size_t NameLength; // Does not include the terminating null character HRESULT hr BOOL retval; hr = StringCbLengthA(szWndName, STRSAFE_MAX_CCH, &NameLength); if (SUCCEEDED(hr)) { // Add 1 to account for the name string's terminating null character. NameLength++; // The HELPWININFO structure contains a minimal TCHAR array of size [2] // that is used for the window name. Since sizeof(HELPWININFO) // includes those two TCHARS, they must be subtracted from the // total when adding the actual string length to calculate the // size of the structure. wSize = sizeof(HELPWININFO) - 2 + NameLength; } else // Something's amiss with the string. return FALSE; hhwi = GlobalAlloc(GHND, wSize); lphwi = (LPHELPWININFO)GlobalLock(hhwi); lphwi->wStructSize = wSize; lphwi->x = 256; // horizontal position lphwi->y = 256; // vertical position lphwi->dx = 767; // width lphwi->dy = 512; // height lphwi->wMax = SW_SHOW; // show the window // secondary window hr = StringCbCopyA(lphwi->rgchMember, sizeof(lphwi->rgchMember), szWndName); if (SUCCEEDED(hr)) { WinHelp(hwnd, "myhelp.hlp", HELP_SETWINPOS, (DWORD)lphwi); GlobalUnlock(hhwi); GlobalFree(hhwi); return TRUE; } else // There was a problem copying the window name. return FALSE; }

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3