Creating Standard Command Headers-显示你的命令
摘要
-
本用例将学习内容
-
CAAAfrGeometryWshop 用例
- CAAAfrGeometryWshop 功能说明
- CAAAfrGeometryWshop 启动方法
- CAAAfrGeometryWshop 代码位置
-
分步实现
-
小结
-
参考文献
CAAAfrGeometryWshop 的功能
如何运行 CAAAfrGeometryWshop
- 选择 文件 → 新建
- 在 “新建” 对话框中,选择 CAAGeometry 并单击 确定
CAAAfrGeometryWshop 将会随 CAAGeometry 文档一同加载。
CAAAfrGeometryWshop 代码位置
- Windows 平台:
InstallRootDirectory\CAAApplicationFrame.edu\CAAAfrGeometryWshop.m\ - Unix 平台:
InstallRootDirectory/CAAApplicationFrame.edu/CAAAfrGeometryWshop.m/
其中 InstallRootDirectory 为 CAA 安装光盘的安装目录。
本文中涉及的唯一类是名为 CAAAfrGeometryWks 的工作台描述类。
分步操作
| 序号 | 步骤 | 实现位置 |
|---|---|---|
| 1 | 创建命令头类 | 工作台类 |
| 2 | 实例化命令头类 | CreateCommands 方法 |
| 3 | 为命令头实例分配资源 | 资源文件 |
创建命令头类
MacDeclareHeader 宏。该宏会自动为您生成一个派生自 CATCommandHeader 的类,CATCommandHeader 是所有命令头的基类,不应对其直接实例化。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.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 |

浙公网安备 33010602011771号