用户定义的工具

MFC 支持用户定义的工具。 用户定义的工具是执行外部用户指定程序的特殊命令。 可以使用自定义过程来管理用户定义的工具。 但是,如果应用程序对象不是从 CWinAppEx 类派生的,则不能使用此过程。 有关自定义的详细信息,请参阅 MFC 的自定义

如果启用了用户定义的工具支持,自定义对话框会自动包含 “工具 ”选项卡。下图显示了 “工具” 页。

“自定义”对话框中的工具选项卡。
“自定义”对话框“工具”选项卡

启用用户定义的工具支持

若要在应用程序中启用用户定义的工具,请调用 CWinAppEx::EnableUserTools。 但是,必须先在应用程序的资源文件中定义多个常量,以用作此调用的参数。

在资源编辑器中创建使用适当命令 ID 的虚拟命令。 在以下示例中,我们将用作 ID_TOOLS_ENTRY 命令 ID。 此命令 ID 标记框架将插入用户定义的工具的一个或多个菜单中的位置。

必须在字符串表中保留一些连续 ID 来表示用户定义的工具。 预留的字符串数等于用户可定义的最大用户工具数。 在下面的示例中,这些名称通过命名ID_USER_TOOL1ID_USER_TOOL10

你可以向用户提供建议,帮助他们为将作为工具调用的外部程序选择目录和参数。 为此,请在资源编辑器中创建两个弹出菜单。 在下面的示例中,这些名称 IDR_MENU_ARGS 命名和 IDR_MENU_DIRS。 对于这些菜单中的每个命令,请在应用程序字符串表中定义一个字符串。 字符串的资源 ID 必须等于命令 ID。

还可以从 CUserTool 类 创建派生类来替换默认实现。 为此,请将派生类的运行时信息作为 CWinAppEx::EnableUserTools 中的第四个参数传递,而不是 RUNTIME_CLASS(CUserTool 类)。

定义适当的常量后,调用 CWinAppEx::EnableUserTools 以启用用户定义的工具。

以下方法调用演示如何使用这些常量:

EnableUserTools(ID_TOOLS_ENTRY,
                ID_USER_TOOL1,
                ID_USER_TOOL10,
                RUNTIME_CLASS(CUserTool),
                IDR_MENU_ARGS,
                IDR_MENU_DIRS);

在此示例中,“ 自定义 ”对话框中将包含“工具”选项卡。 每当用户打开该菜单时,框架将替换任何与任何菜单中命令 ID 匹配的命令与 ID_TOOLS_ENTRY 当前定义的用户工具集匹配的任何命令。 命令 ID_USER_TOOL10 ID ID_USER_TOOL1 保留用于用户定义的工具。 类 CUserTool 类处理对用户工具的调用。 “ 自定义 ”对话框的工具选项卡提供参数和目录条目字段右侧的按钮,用于访问 菜单IDR_MENU_ARGSIDR_MENU_DIRS。当用户从其中一个菜单中选择命令时,框架将追加到相应的文本框中,该字符串的资源 ID 等于命令 ID。

包括预定义工具

如果要在应用程序启动时预定义某些工具,则必须替代应用程序主窗口的 CFrameWnd::LoadFrame 方法。 在该方法中,必须执行以下步骤。

在 LoadFrame 中添加新工具
  1. 通过调用 CWinAppEx::GetUserToolsManager 获取指向 CUserToolsManager对象的指针。

  2. 对于要创建的每个工具,请调用 CUserToolsManager::CreateNewTool。 此方法返回指向 CUserTool 类 对象的指针,并将新创建的用户工具添加到工具的内部集合中。 如果将 CUserTool 类 派生类的运行时信息作为 CWinAppEx::EnableUserTools 的第四个参数提供, 则 CUserToolsManager::CreateNewTool 将实例化并返回该类的实例。

  3. 对于每个工具,通过设置并调用CUserTool::SetCommand设置其命令来设置CUserTool::m_strLabel其文本标签。 CUserTool 类的默认实现会自动从调用SetCommand中指定的程序检索可用图标。

另请参阅

MFC 的自定义
CUserTool 类
CUserToolsManager 类
CWinAppEx 类