命令结构拆解
1 按照02-引入官方样例程序(The CAAGeometry Sampl).doc流程引入程序样例

2 以上图中命令Search Demonstrator为例,探索开发一个命令的方法。通过全局检索判定出和命令Search Demonstrator相关的配置和代码如下图,共6个文件CAAAfrGeneralWksAdn.cpp,CAACafSearchCmd.cpp,CAACafSearchDlg.cpp,CAACafLaunchNextQueryNotification.cpp,CAACafSearchCmd.CATNls,CAAAfrGeneralWksAddinHeader.CATNls。

3 CAAAfrGeneralWksAdn.cpp,CAAAfrGeneralWksAdn.h


CATIAfrGeneralWksAddin是在创建CAAAfrGeneralWksAdn这个组件时,选择的TIE Object,CreateCommands(),CreateToolbars()是CATIAfrGeneralWksAddin关联的两个方法,用于创建命令和工具栏。


用MacDeclareHeader来配置CAAAfrGeneralWksAddinHeader,用于定义命令。

用NewAccess等宏,定义工具栏。
4 CAACafSearchCmd.h,CAACafSearchCmd.cpp


CAACafSearchCmd是CATStateCommand的子类。BuildGraph()是命令的初始化方法,Activate(),Cancel(),Desactivate()是这个命令激活取消的方法。

命令的弹窗代码封装在CAACafSearchDlg类中。

Activate(),Cancel(),Desactivate()的实现逻辑是SetVisibility方法。
5 CAACafSearchDlg.h,CAACafSearchDlg.cpp

CAACafSearchDlg实现自CATDlgDialog。Build()是构建弹窗的方法。
6 CAACafLaunchNextQueryNotification.h,CAACafLaunchNextQueryNotification.cpp

CAACafLaunchNextQueryNotification实现自CATNotification,用于配置监听。
7 CAAAfrGeneralWksAddinHeader.CATNls,CAACafSearchCmd.CATNls

CAAAfrGeneralWksAddinHeader用于配置命令的属性。

CAACafSearchCmd用于配置命令被鼠标指向时的提示信息。
重点功能解析
状态转换

stStateLaunch是状态,pFirstTransition是状态之间转换的逻辑。如果Action((ActionMethod) & CAACafSearchCmd::LaunchQuery的返回结果是FALSE,则转台转换失败,不然则成功。状态转换触发的时机是鼠标点选。
构建命令弹窗

手动编码,构建命令的弹窗,并微调弹窗的相对布局。