Creating Standard Command Headers-显示你的命令

摘要

本文演示如何创建一个标准命令头类,以及如何使用该类来暴露 / 对外提供若干命令。

  • 本用例将学习内容

  • CAAAfrGeometryWshop 用例

    • CAAAfrGeometryWshop 功能说明  
    • CAAAfrGeometryWshop 启动方法  
    • CAAAfrGeometryWshop 代码位置
  • 分步实现

  • 小结

  • 参考文献

通过本用例您将学习到
本用例旨在演示如何创建一个标准的命令头类,以及如何使用该类来对外暴露多个命令。
CAAAfrGeometryWshop 用例
CAAAfrGeometryWshop 是 CAAApplicationFrame.edu 框架的一个用例,用于演示 ApplicationFrame 框架的各项功能。

CAAAfrGeometryWshop 的功能

CAAAfrGeometryWshop 用例为 CAAGeometry 文档 [1] 创建了一个名为 “CAA V5: Geometry Creation” 的工作台。此处仅用该用例来展示并详细说明如何借助命令头来暴露工作台命令。

如何运行 CAAAfrGeometryWshop

有关此用例运行方式的详细说明,请参阅 “CAAGeometry 示例” 用例中名为 “如何运行 CAAGeometry 用例” 的章节。具体操作流程如下:
请勿在命令行中输入模块名称,而是输入 CNEXT。待应用程序启动完成后,执行以下操作:
  1. 选择 文件 → 新建
  2. 在 “新建” 对话框中,选择 CAAGeometry 并单击 确定

CAAAfrGeometryWshop 将会随 CAAGeometry 文档一同加载。

CAAAfrGeometryWshop 代码位置

CAAAfrGeometryWshop 用例由位于 CAAAfrGeometryWshop.m 模块以及 CAAApplicationFrame.edu 框架下 ProtectedInterfaces 目录中的类和接口构成:
  • Windows 平台:InstallRootDirectory\CAAApplicationFrame.edu\CAAAfrGeometryWshop.m\
  • Unix 平台:InstallRootDirectory/CAAApplicationFrame.edu/CAAAfrGeometryWshop.m/

其中 InstallRootDirectory 为 CAA 安装光盘的安装目录。

本文中涉及的唯一类是名为 CAAAfrGeometryWks 的工作台描述类。

分步操作

为几何工作台的命令创建命令头,共分为三个步骤:
序号步骤实现位置
1 创建命令头类 工作台类
2 实例化命令头类 CreateCommands 方法
3 为命令头实例分配资源 资源文件
 
 

创建命令头类

要创建一个命令头类,应使用 MacDeclareHeader 宏。该宏会自动为您生成一个派生自 CATCommandHeader 的类,CATCommandHeader 是所有命令头的基类,不应对其直接实例化。
CAAAfrGeometryWks 工作台对应的命令头类名为 CAAAfrGeometryWksHeader。下面两行代码用于创建该类:
#include "CATCommandHeader.h"
MacDeclareHeader(CAAAfrGeometryWksHeader);

该宏会创建一个可直接使用的类。

实例化命令头类

例如,要为点命令实例化该命令头,需使用宏自动生成的如下构造函数:
new CAAAfrGeometryWksHeader("Point",
                            "CAADegGeoCommands",
                            "CAADegCreatePointCmd",
                            (void *) NULL);

其中各参数含义如下:

  • Point    分配给该命令头的标识符。后续将用它把定义好的命令启动器(用于将命令添加到菜单和工具栏)与该命令头关联,相关内容见《在菜单和工具栏中暴露你的命令》一文。该标识符还用于构造定义命令头资源的变量,例如最终用户在菜单中看到的本地化名称,或在工具栏中显示的图标,相关内容见《为命令头创建资源》一文。
  • CAADegGeoCommands包含命令代码的共享库或 DLL 名称,不带前缀 lib,也不带随操作系统变化的后缀。
  • CAADegCreatePointCmd命令类的名称。
  • 最后一个参数  启动命令时可传递给命令构造函数的对象指针,通常为 NULL。该参数常为字符串,用于在同一个命令可根据当前活动文档与数据执行多种操作时,指定具体要执行的动作,例如 “更新” 或 “全部更新”、“剪切” 或 “复制” 等。

不同的命令可以共用同一个命令头类来创建各自的命令头实例。例如,为创建一个工作台 [1],我们在CAAAfrGeometryWshop工作台描述类的CreateCommands方法中,创建了CAAAfrGeometryWksHeader类的以下实例:

void CAAAfrGeometryWks::CreateCommands()
{
  ...
  //     1-a 无参数情形
  new CAAAfrGeometryWksHeader("Point",  "CAADegGeoCommands",
                              "CAADegCreatePointCmd",    (void *) NULL);
  new CAAAfrGeometryWksHeader("Line",   "CAADegGeoCommands",
                              "CAADegCreateLineCmd",     (void *) NULL);
  new CAAAfrGeometryWksHeader("Circle", "CAADegGeoCommands",
                              "CAADegCreateCircleCmd",   (void *) NULL);
  ...
  //     1-b 带参数情形
  new CAAAfrGeometryWksHeader("xNormal", "CAAAfrGeoCommands",
                              "CAAAfrChangeViewNormalCmd",(void *)CATINT32ToPtr(1));
  new CAAAfrGeometryWksHeader("yNormal", "CAAAfrGeoCommands",
                              "CAAAfrChangeViewNormalCmd",(void *)CATINT32ToPtr(2));
  new CAAAfrGeometryWksHeader("zNormal", "CAAAfrGeoCommands",
                              "CAAAfrChangeViewNormalCmd",(void *)CATINT32ToPtr(3));
  ...
}

有关CAAAfrChangeViewNormalCmd类的定义,请参阅参考文献 [2]。CATINT32ToPtr宏可确保代码兼容 64 位系统。

为命令头实例分配资源

CAAAfrGeometryWksHeader 类会自动与两个资源文件关联,这两个文件的名称由该类名构成:
  • CAAAfrGeometryWksHeader.CATNls:用于可翻译的标题与帮助提示信息
  • CAAAfrGeometryWksHeader.CATRsc:用于其他资源,例如在工具栏中显示的图标

资源通过键名来指定,键名由命令头类名、命令头实例标识符、资源关键字拼接而成,中间用点分隔。在文件 CAAAfrGeometryWksHeader.CATNls 中,针对 “点” 命令的资源定义如下:

...
CAAAfrGeometryWksHeader.Point.Title     = "点";
CAAAfrGeometryWksHeader.Point.ShortHelp = "点";
CAAAfrGeometryWksHeader.Point.Help      = "创建点:指定点或输入坐标";
CAAAfrGeometryWksHeader.Point.LongHelp  = "点(插入菜单)
可通过两种方式创建点:
1. 使用鼠标左键指定点
2. 在对话框中输入点坐标
该命令处于重复模式,因此在命令执行期间
可以连续创建多个点。
若要退出该命令,请选择其他命令。";
CAAAfrGeometryWksHeader.Point.Category  = "元素";
...

这些资源包括:

Title      

图片

 显示在菜单栏中该命令对应的文本

ShortHelp

图片

 当鼠标悬停在命令上方时,在气泡中显示的命令简短帮助信息。此内容不适用于位于菜单栏中的命令

Help

图片

当鼠标悬停在命令上方时,在状态栏中显示的命令帮助信息。此内容不适用于仅位于菜单栏中的命令,但适用于同时出现在菜单栏和工具栏中的命令

LongHelp

图片

 当最终用户点击图标后,鼠标指针会变为问号形态,此时再点击代表该命令的图标,就会在气泡提示框中显示这段文本。此内容不适用于仅位于菜单栏中的命令。

图片

 Category

图片

 与命令关联的一个属性,用于在自定义窗口命令选项卡中对命令进行排序。

 文件 CAAAfrGeometryWksHeader.CATRsc 中包含对点(Point)命令的如下定义:

...
CAAAfrGeometryWksHeader.Point.Icon.Normal  = "I_EduPoint" ;
...

这是用于在工具栏中显示点命令的图标文件名:

Icon.Normal

图片

这是与该命令关联的图标,在命令可用时显示于工具栏中。当命令不可用时显示的灰色禁用图标,会基于该图标自动生成。

在 P2 界面模式下,默认状态的阴影图标、按下状态图标以及获得焦点时的图标,也均由该正常状态图标自动生成。

简要总结

命令头是一个代表命令的轻量级对象,在最终用户未触发该命令前,不会将命令加载进来。命令头是命令头类的一个实例。标准命令头类通过 MacDeclareHeader 宏创建,可被多个命令共用。用于展示和调用命令的相关资源会被分配给命令头,这样即便命令本身未加载,这些资源也能正常使用。

 

References

[1] Creating a Workbench
[2] Using Cameras
posted @ 2026-04-15 13:55  Breadss  阅读(4)  评论(0)    收藏  举报