admin 发表于 2017-1-16 13:16:10

CATIA二次开发入门教程---创建工作台案例--

CATIA二次开发入门教程---7 创建工作台案例

本使用案例将学到什么此用例旨在显示如何创建要添加到给定workshop的工作台。与workshop一样,工作台是一个对象,用于收集用于处理文档的命令,并将其安排在工具栏和菜单中。命令头用于建立工作台和命令之间的链接. 本案例创建一个CAAAfrGeoCreationWbench
CAAAfrGeoCreationWbench做什么该CAAAfrGeoCreationWbench用例创建一个名为工作台CAA几何创建为CAAGeometry文档。其规格涵盖了您将遇到的大多数情况。提供了两个工具栏:1 实体工具栏。它包括五个新命令:Cuboid,Sphere,Torus和缸1和2。2 曲面工具栏。它包括三个新命令:Revolution Surface,Nurbs Surface和Offset Surface菜单栏中的唯一变化是在插入菜单中使用两个子菜单在现有菜单下面添加这些命令。
键入CNEXT。应用程序就绪后,请执行以下操作:
[*]选择开始 - >基础设施 - > CAA V5:几何创建
这将创建一个新的CAAGeometry文档,其中CAA V5:几何创建工作台处于活动状态
用到的类和接口是 类和接口是:
CAAAfrGeoCreationWkb工作台描述类
CAAAfrGeoCreationWkbFactory工作台类的工厂类
CAAIAfrGeoCreationWkbFactory工厂接口由实施CAAAfrGeoCreationWkbFactory
TIE_CAAIAfrGeoCreationWkbFactoryTIE类为工厂接口
CAAIAfrGeoCreationWkbAddin由工作台公开的加载项接口及其所有加载项都必须实现
TIE_CAAIAfrGeoCreationWkbAddinTIE类用于加载项接口


admin 发表于 2017-1-16 13:17:53

要创建CAA几何创建工作台,有七个步骤:
1        创建工作台工厂界面        LocalInterfaces和src
2        创建工作台工厂        LocalInterfaces和src
3        创建工作台描述类        LocalInterfaces和src
4        创建命令头           CreateCommands 方法
5        创建工作台并排列命令        CreateWorkbench 方法
6        提供资源并将工作台插入“开始”菜单        资源文件
7        创建工作台暴露接口        ProtectedInterfaces和src

admin 发表于 2017-1-16 13:23:25

创建工作台工厂接口


该工厂接口被命名为CAAIAfrGeoCreationWkbFactory。要创建此接口,请创建:
头文件
源文件
TIE tsrc文件。
如下所示。
CAAIAfrGeoCreationWkbFactory.h

#include <CATIGenericFactory.h>
extern IID IID_CAAIAfrGeoCreationWkbFactory;
class CAAIAfrGeoCreationWkbFactory :
public CATIGenericFactory{CATDeclareInterface;public :};

一个工厂接口是CAA接口,即,从派生抽象类CATIGenericFactory。正如任何接口,它有一个IID声明IID_其次是接口的名称,包括 CATDeclareInterface声明,这个抽象类是接口宏。比那些没有额外的方法CATIGenericFactory是必要的。不要忘记TIE编译器所需的public关键字。


其源文件CAAIAfrGeoCreationWkbFactory.cpp如下
#include <CAAIAfrGeoCreationWkbFactory.h>IID IID_CAAIAfrGeoCreationWkbFactory = {    0xb32eed10,    0xd4c1,    0x11d3,    {0xb7,0xf5,0x00,0x08,0xc7,0x4f,0xe8,0xdd}};
CATImplementInterface(CAAIAfrGeoCreationWkbFactory,CATIGenericFactory);


在src目录中创建名为TIE_CAAIAfrGeoCreationWkbFactory.tsrc的文件,并包含:
#include "CAAIAfrGeoCreationWkbFactory.h"


多工作空间应用程序生成器(mkmk)将为您生成此接口的TIE,即ProtectedGenerated目录中的TIE_CAAIAfrGeoCreationWkbFactory.h文件。





























admin 发表于 2017-1-16 13:30:50

创建工作台工厂

创建工作台实例的工厂类必须连接的名称之类的实例,也就是工作台描述类 CAAAfrGeoCreationWkb,以字符串工厂。这给CAAAfrGeoCreationWkbFactory。
要创建此类,请创建:
头文件使用CATDeclareConfigurationFactory 宏
源文件,使用CATImplementConfigurationFactory 宏
更新接口字典和工厂字典。
创建CAAAfrGeoCreationWkbFactory.h头文件。
#include“CATWorkshopConfigurationFactory.h”

CATDeclareConfigurationFactory(CAAAfrGeoCreationWkb);
该CATDeclareConfigurationFactory宏参数是工作台描述类的名称。
创建CAAAfrGeoCreationWkbFactory.cpp文件。
#include <CAAAfrGeoCreationWkb.h>
#include <CAAAfrGeoCreationWkbFactory.h>
#include <TIE_CAAIAfrGeoCreationWkbFactory.h>
CATImplementConfigurationFactory(CAAAfrGeoCreationWkb,
                                 CAAIAfrGeoCreationWkbFactory);
该CATImplementConfigurationFactory参数是工作台描述类的名称和工作台工厂接口分别的名称。在CATDeclareConfigurationFactory与 CATImplementConfigurationFactory作为数据扩展宏创建工作台工厂实现类 CATApplicationFrame组件
您现在应该更新这两个字典文件:

该接口的字典,那就是他的名字是迪科,如CAAApplicationFrame.dico后缀框架名称的文件,并且你应该创建或框架CNEXT /代码/字典目录更新。接口字典包含以下声明,以说明该CATApplicationFrame组件实现 CAAIAfrGeoCreationWkbFactory接口,由宏,其代码位于libCAAAfrGeoCreationWbench共享库或DLL创建的扩展类的方法:
CATApplicationFrame CAAIAfrGeoCreationWkbFactory libCAAAfrGeoCreationWbench
该工厂的字典,那就是他的名字是事实,如CAAApplicationFrame.fact后缀框架名称的文件,并且你应该创建或框架CNEXT /代码/字典目录更新。工厂字典包含以下声明,以说明该CAAIAfrGeoCreationWkbFactory界面是一个工厂的实现将创建一个接口 CAAAfrGeoCreationWkb类的实例:
CAAAfrGeoCreationWkb CAAIAfrGeoCreationWkbFactory
在运行时,包含这些字典文件的目录的路径名将连接到CATDictionaryPath环境变量中的其他字典路径名。


创建工作台描述类

该CAAAfrGeoCreationWkb类实现 CATICAAAfrGeometryWksConfiguration由CAAGeometry车间暴露接口。它包括以下方法:
CreateCommands 以实例化工作台的命令的命令头
CreateWorkbench 创建工作台,菜单和工具栏的容器,并在菜单和工具栏中排列命令
GetCustomInterfaces,返回由工作台公开的接口的名称以启用其自定义
GetAddinInterface 它返回由工作台公开以创建加载项的接口的名称。
你应该:
为创建头文件和源文件CAAAfrGeoCreationWkb 类
更新字典。
创建CAAAfrGeoCreationWkb.h文件
#include“CATBaseUnknown.h”
#include“CATListPV.h”

class CATCmdWorkbench;

class CAAAfrGeoCreationWkb:public CATBaseUnknown
{
CATDeclareClass;
public:
   CAAAfrGeoCreationWkb();
   virtual〜CAAAfrGeoCreationWkb();

   void CreateCommands();
   CATCmdWorkbench * CreateWorkbench();
   CATClassId GetAddinInterface();
   void GetCustomInterfaces(CATListPV * oDefaultIIDList,
                                           CATListPV * oCustomIIDList);
private:
   CAAAfrGeoCreationWkb(const CAAAfrGeoCreationWkb&iObjectToCopy);
};
该CAAAfrGeoCreationWkb类C ++ -派生自CATBaseUnknown。的CATDeclareClass宏声明类 CAAAfrGeoCreationWkb属于组件。这个类有一个构造函数,析构函数中,的四种方法CATIWorkbench接口和一个拷贝构造函数。请注意,复制构造函数设置为private。这防止编译器在不知道的情况下将复制构造函数创建为public。此复制构造函数未在源文件中实现。
创建CAAAfrGeoCreationWkb.cpp文件。文件框架如下所示。每个方法的实现在单独的章节中描述。
#include <CAAAfrGeoCreationWkb.h>

的#include <CATCommandHeader.h> //参见创建命令头
MacDeclareHeader(CAAAfrGeoCreationWkbHeader);

#include <CATCreateWorkshop.h>

CATImplementClass(CAAAfrGeoCreationWkb,Implementation,CATBaseUnknown,CATNull);
#include <TIE_CATICAAAfrGeometryWksConfiguration.h>
TIE_CATICAAAfrGeometryWksConfiguration(CAAAfrGeoCreationWkb);

CAAAfrGeoCreationWkb :: CAAAfrGeoCreationWkb(){}
CAAAfrGeoCreationWkb ::〜CAAAfrGeoCreationWkb(){}

void CAAAfrGeoCreationWkb :: CreateCommands()
{
... //见创建命令头
}}

CATCmdWorkbench * CAAAfrGeoCreationWkb :: CreateWorkbench()
{
... //见创建Workbench和安排的命令
}}

CATClassId CAAAfrGeoCreationWkb :: GetAddinInterface()
{
return“CAAIAfrGeoCreationWkbAddin”;
}}

void CAAAfrGeoCreationWkb :: GetCustomInterfaces(CATListPV * oDefaultIIDList,
                                             CATListPV * oCustomIIDList)
{}
该CAAAfrGeoCreationWkb类规定,它实现了 CATICAAAfrGeometryWksConfiguration接口多亏了 TIE_CATICAAAfrGeometryWksConfiguration宏。该 CATImplementClass宏声明,该CAAAfrGeoCreationWkb 类是部分主类[ 2 ],由于 Implementation关键字,并从CATBaseUnknown它OM-提炼出来[ 2 ]。第四个参数必须始终设置CATNull为组件主要类别。
该GetCustomInterfaces方法必须是空的。由工作台暴露,使客户能够创建加载项的接口的名称是由返回的GetAddinInterface方法。请参阅 创建工作台暴露接口来创建此接口。
更新词典
更新界面的字典,这是一个命名的文件,例如,CAAApplicationFrame.dico,其目录的路径名在运行时在CATDictionaryPath环境变量连接,并且包含以下声明,以说明该CAAAfrGeoCreationWkb类实现CATICAAAfrGeometryWksConfiguration接口,并且其代码位于libCAAAfrGeoCreationWbench共享库或DLL中。更新为粗体字:
CATApplicationFrame CAAIAfrGeoCreationWkbFactory libCAAAfrGeoCreationWbench
CAAAfrGeoCreationWkb CATICAAAfrGeometryWksConfiguration libCAAAfrGeoCreationWbench




创建命令头

这是通过完成CreateCommands方法。工作台中可用的每个命令都必须有一个命令头。命令头是命令头类的实例,并且不同的命令可以共享相同的命令头类来创建它们的命令头。有关更多详细信息,请参阅命令头。
单个命令头类的命令,命名CAAAfrGeoCreationWkbHeader使用创建的MacDeclareHeader宏。如果命令有时不可用,您也可以更经典地创建类。这在命令头中描述。
创建CAAAfrGeoCreationWkbHeader命令头类。为此,请在CAAAfrGeoCreationWkb.cpp中添加以下内容:
#include <CATCommandHeader.h>
MacDeclareHeader(CAAAfrGeoCreationWkbHeader);
该MacDeclareHeader宏创建头文件并为CAAAfrGeoCreationWkbHeader类的源文件和联营与此类资源文件CAAAfrGeoCreationWkbHeader.CATNls和CAAAfrGeoCreationWkbHeader.CATRsc。
创建代码以实例您的命令报头在CreateCommands方法。此方法应包含每个命令的命令头类的一个实例化语句。每个语句具有以下形式,例如对于Cuboid命令。
void CAAAfrGeoCreationWkb :: CreateCommands()
{
... ...
new CAAAfrGeoCreationWkbHeader(“CAAAfrCuboidHdr”,
                                 “CAADegGeoCommands”,
                                 “CAADegCreateCuboidCmd”,
                                 (void *)NULL);
... ...
}}
命令头构造函数具有以下参数:
CAAAfruboidHdr是您需要分配给命令头的标识符。它将在以后使用:
要关联命令启动器,您将定义将命令放在菜单中,并在工具栏中使用命令头。这是该工作台在完成创建工作台和排列的命令。
构建定义命令头资源的变量,例如最终用户在菜单中以他/她自己的语言看到的名称,或要显示在工具栏中的图标。这是在解释 提供了资源和插入工作台到开始菜单
CAADegGeoCommands 是包含Cuboid命令代码的共享库或DLL的名称,不带前缀lib,不带后缀,具体取决于操作系统。
CAADegCreateCuboidCmd 是Cuboid命令类的名称
最后一个参数是执行它时传递​​给命令的对象的可能指针。它通常是指示当相同命令可以根据活动文档和数据(诸如“更新”或“全部更新”或“剪切”或“复制”)执行若干动作时执行的动作的字符串。

admin 发表于 2017-1-16 13:47:50

1 创建工作台
工作台包含其工具栏及其菜单栏。创建工作台作为实例CATCmdWorkbench使用类NewAccess 宏。
CATCmdWorkbench * CAAAfrGeoCreationWkb :: CreateWorkbench()
{
NewAccess(CATCmdWorkbench,pCAAAfrGeoCreationWkb,CAAAfrGeoCreationWkb);
... //见创建容器的工具栏和菜单栏
return pCAAAfrGeoCreationWkb;
}}
pCAAAfrGeoCreationWkb是用来处理工作台实例指针变量,CAAAfrGeoCreationWkb就是工作台标识符。注意,工作台类名和工作台标识符必须相同,才能考虑开始菜单中的工作台资源。它们都以粗体字显示。此标识符还用于命名工作台资源文件CAAAfrGeoCreationWkb.CATNls和CAAAfrGeoCreationWkb.CATRsc。“为工作台创建资源”中介绍了工作台资源以及如何提供它们。


2 为工具栏和菜单栏创建容器
工具栏和菜单栏又是命令和子菜单的容器。
创建工具栏和菜单栏的代码如下:
... ...
    NewAccess(CATCmdContainer,pCAAAfrSolidEltTlb,CAAAfrSolidEltTlb);
    SetAccessChild(pCAAAfrGeoCreationWkb,pCAAAfrSolidEltTlb);
    ... //见创建固体工具栏内容
    addToolbarView(pCAAAfrSolidEltTlb,1,Right);

    NewAccess(CATCmdContainer,pCAAAfrSurfacicEltTlb,CAAAfrSurfacicEltTlb);
    SetAccessNext(pCAAAfrSolidEltTlb,pCAAAfrSurfacicEltTlb);
    ... //见创建曲面工具栏内容
    AddToolbarView(pCAAAfrSurfacicEltTlb,-1,Right);

    NewAccess(CATCmdContainer,pCAAAfrGeoCreationMbr,CAAAfrGeoCreationMbr);
    ... //见创建菜单栏内容
    SetWorkbenchMenu(pCAAAfrGeoCreationWkb,pCAAAfrGeoCreationMbr);
... ...
这里是发生什么:
实体工具栏作为一个实例创建CATCmdContainer 使用类NewAccess宏。pCAAAfrSolidEltTlb是用于处理实体工具栏命令容器实例的指针的变量,并且CAAAfrSolidEltTlb是用来指它在工作台资源文件的标识符。此标识符在应用程序中可以找到的所有工具栏标识符之间必须是唯一的。实体工具栏使用设置工作台的子SetAccessChild宏,其默认位置是使用定义的AddToolbarView宏,在这里1指实体工具栏默认为可见(-1指不可见),并Right表示该工具栏停靠在右边侧的应用程序窗口。
曲面工具栏被以相同的方式创建的,但它是使用设置实体工具栏旁SetAccessNext宏。默认情况下它是不可见的(-1表示不可见),并且也停靠在应用程序窗口的右侧。
菜单栏也被创建为实例CATCmdContainer 类被称为使用pCAAAfrGeoCreationMbr 指针。其标识符是CAAAfrGeoCreationMbr,用于其的资源。它被设置为使用工作台的菜单栏 SetWorkbenchMenu宏。


3 创建实体工具栏内容

此工具栏包含四个命令:Cuboid,Sphere,Torus和Cylinder。你应该为每个命令:
(1)创建使用命令启动NewAccess宏
(2)关联命令启动器,使用SetAccessCommand 宏,在定义适当的命令头识别 CreateCommands方法
(3)使用排列工具栏中的命令启动 SetAccessChild和SetAccessNext宏
... ...
      NewAccess(CATCmdStarter,pCAAAfrTSolidEltCuboidStr,CAAAfrTSolidEltCuboidStr);
      SetAccessCommand(pCAAAfrTSolidEltCuboidStr,“CAAAfrCuboidHdr”);
      SetAccessChild(pCAAAfrSolidEltTlb,pCAAAfrTSolidEltCuboidStr);

      NewAccess(CATCmdStarter,pCAAAfrTSolidEltSphereStr,CAAAfrTSolidEltSphereStr);
      SetAccessCommand(pCAAAfrTSolidEltSphereStr,“CAAAfrSphereHdr”);
      SetAccessNext(pCAAAfrTSolidEltCuboidStr,pCAAAfrTSolidEltSphereStr);

      NewAccess(CATCmdStarter,pCAAAfrTSolidEltTorusStr,CAAAfrTSolidEltTorusStr);
      SetAccessCommand(pCAAAfrTSolidEltTorusStr,“CAAAfrTorusHdr”);
      SetAccessNext(pCAAAfrTSolidEltSphereStr,pCAAAfrTSolidEltTorusStr);

      NewAccess(CATCmdStarter,pCAAAfrTSolidEltCylinder1Str,CAAAfrTSolidEltCylinder1Str);
      SetAccessCommand(pCAAAfrTSolidEltCylinder1Str,“CAAAfrCylinder1Hdr”);
      SetAccessNext(pCAAAfrTSolidEltTorusStr,pCAAAfrTSolidEltCylinder1Str);

      NewAccess(CATCmdStarter,pCAAAfrTSolidEltCylinder2Str,CAAAfrTSolidEltCylinder2Str);
      SetAccessCommand(pCAAAfrTSolidEltCylinder2Str,“CAAAfrCylinder2Hdr”);
      SetAccessNext(pCAAAfrTSolidEltCylinder1Str,pCAAAfrTSolidEltCylinder2Str);
... ...

每个命令需要三个宏。例如,Cuboid命令处理如下:
首先创建命令启动作为CATCmdStarter使用实例NewAccess宏。pCAAAfrTSolidEltCuboidStr 是用于处理一个指向实例变量,并且 CAAAfrTSolidEltCuboidStr是它的标识。
然后使用这个命令启动长方体命令头相关联SetAccessCommand宏。第二个参数是定义为命令头导出器的第一个参数的Cuboid命令头标识符。请参阅创建命令头
最后将Cuboid命令启动器设置为“实体”工具栏的子项。
继续在为其它命令的相同的方式,不同之处在于它们被设定为下一个使用彼此的SetAccessNext宏。


4 创建曲面工具栏内容

此工具栏包含三个命令:Revolution Surface,Nurbs Surface和Offset Surface。你应该为每个命令:
创建使用命令启动NewAccess宏
关联命令启动器,使用SetAccessCommand 宏,在定义适当的命令头识别 CreateCommands方法
使用排列工具栏中的命令启动 SetAccessChild和SetAccessNext宏
... ...
    NewAccess(CATCmdStarter,pCAAAfrTSurfRevolStr,CAAAfrTSurfRevolStr);
    SetAccessCommand(pCAAAfrTSurfRevolStr,“CAAAfrRevolSurfHdr”);
    SetAccessChild(pCAAAfrSurfacicEltTlb,pCAAAfrTSurfRevolStr);

    NewAccess(CATCmdStarter,pCAAAfrTSurfNurbsStr,CAAAfrTSurfNurbsStr);
    SetAccessCommand(pCAAAfrTSurfNurbsStr,“CAAAfrNurbsSurfHdr”);
    SetAccessNext(pCAAAfrTSurfRevolStr,pCAAAfrTSurfNurbsStr);

    NewAccess(CATCmdStarter,pCAAAfrTSurfOffsetStr,CAAAfrTSurfOffsetStr);
    SetAccessCommand(pCAAAfrTSurfOffsetStr,“CAAAfrOffsetSurfHdr”);
    SetAccessNext(pCAAAfrTSurfNurbsStr,pCAAAfrTSurfOffsetStr);
... ...
每个命令需要三个宏。例如,Revolution Surface命令处理如下:
首先创建命令启动作为CATCmdStarter使用实例NewAccess宏。pCAAAfrTSurfRevolStr 是用于处理一个指向实例变量,并且 CAAAfrTSurfRevolStr是它的标识。
然后使用这个命令启动的回转面命令头相关联SetAccessCommand宏。第二个参数是Revolution Surface命令头标识符,定义为命令头导出器的第一个参数。请参阅 创建命令头
最后将Revolution Surface命令启动器设置为Surfaces工具栏的子项。
继续在为其它命令的相同的方式,不同之处在于它们被设定为下一个使用彼此的SetAccessNext宏。

5 创建菜单栏内容
菜单和子菜单被创建为CATCmdContainer实例,菜单项被创建为CATCmdStarter实例。当运行时使用车间菜单栏加载或激活工作台时,您创建的菜单栏将合并,本身将导致默认菜单栏(即,没有文档处于活动状态时存在的菜单栏)与一个为车间定义。 您不能从默认菜单栏或为车间定义的菜单栏中删除菜单,也不能更改菜单​​顺序,也不能修改现有菜单项,也不能将子菜单添加到现有菜单项。您只能添加项在现有菜单的第一级具有子菜单或不是。

创建使用每个菜单和子菜单命令容器 NewAccess宏
创建一个使用每个命令的命令启动NewAccess宏
关联的每个命令启动器,使用SetAccessCommand 宏,在定义适当的命令头识别 CreateCommands方法
使用排列菜单命令首发SetAccessChild,和SetAccessNext宏

插入菜单 - 实体子菜单
... ...
    NewAccess(CATCmdContainer,pCATAfrInsertMnu,CATAfrInsertMnu);
    SetAccessChild(pCAAAfrGeoCreationMbr,pCATAfrInsertMnu);

      NewAccess(CATCmdSeparator,pCAAAfrGeoCreationInsertSep,CAAAfrGeoCreationInsertSep);
      SetAccessChild(pCATAfrInsertMnu,pCAAAfrGeoCreationInsertSep);

      NewAccess(CATCmdContainer,pCAAAfrSolidEltSnu,CAAAfrSolidEltSnu);
      SetAccessNext(pCAAAfrGeoCreationInsertSep,pCAAAfrSolidEltSnu);

      NewAccess(CATCmdStarter,pCAAAfrMSolidCuboidStr,CAAAfrMSolidCuboidStr);
      SetAccessChild(pCAAAfrSolidEltSnu,pCAAAfrMSolidCuboidStr);
      SetAccessCommand(pCAAAfrMSolidCuboidStr,“CAAAfrCuboidHdr”);

      NewAccess(CATCmdStarter,pCAAAfrMSolidSphereStr,CAAAfrMSolidSphereStr);
      SetAccessNext(pCAAAfrMSolidCuboidStr,pCAAAfrMSolidSphereStr);
      SetAccessCommand(pCAAAfrMSolidSphereStr,“CAAAfrSphereHdr”);
                          
      NewAccess(CATCmdStarter,pCAAAfrMSolidTorusStr,CAAAfrMSolidTorusStr);
      SetAccessNext(pCAAAfrMSolidSphereStr,pCAAAfrMSolidTorusStr);
      SetAccessCommand(pCAAAfrMSolidTorusStr,“CAAAfrTorusHdr”);

      NewAccess(CATCmdStarter,pCAAAfrMSolidCylinder1Str,CAAAfrMSolidCylinder1Str);
      SetAccessNext(pCAAAfrMSolidTorusStr,pCAAAfrMSolidCylinder1Str);
      SetAccessCommand(pCAAAfrMSolidCylinder1Str,“CAAAfrCylinder1Hdr”);

      NewAccess(CATCmdStarter,pCAAAfrMSolidCylinder2Str,CAAAfrMSolidCylinder2Str);
      SetAccessNext(pCAAAfrMSolidCylinder1Str,pCAAAfrMSolidCylinder2Str);
      SetAccessCommand(pCAAAfrMSolidCylinder2Str,“CAAAfrCylinder2Hdr”);
... ...
将创建“插入”菜单命令容器,即使它已经存在。然后创建Solids子菜单命令容器,并将其设置为“插入”菜单命令容器的子代。由于没有给出其他定位信息,它应该位于车间菜单栏的最后一个子菜单或命令之下,即平面命令。然后,创建Cuboid命令启动器并将其设置为Solids子菜单命令容器的子代,并将其他克隆并设置为彼此相邻。
插入菜单 - 曲面子菜单
... ...
      NewAccess(CATCmdContainer,pCAAAfrSurfacicEltSnu,CAAAfrSurfacicEltSnu);
      SetAccessNext(pCAAAfrSolidEltSnu,pCAAAfrSurfacicEltSnu);

      NewAccess(CATCmdStarter,pCAAAfrMSurfRevolStr,CAAAfrMSurfRevolStr);
      SetAccessChild(pCAAAfrSurfacicEltSnu,pCAAAfrMSurfRevolStr);
      SetAccessCommand(pCAAAfrMSurfRevolStr,“CAAAfrRevolSurfHdr”);

      NewAccess(CATCmdStarter,pCAAAfrMSurfNurbsStr,CAAAfrMSurfNurbsStr);
      SetAccessNext(pCAAAfrMSurfRevolStr,pCAAAfrMSurfNurbsStr);
      SetAccessCommand(pCAAAfrMSurfNurbsStr,“CAAAfrNurbsSurfHdr”);

      NewAccess(CATCmdStarter,pCAAAfrMSurfOffsetStr,CAAAfrMSurfOffsetStr);
      SetAccessNext(pCAAAfrMSurfNurbsStr,pCAAAfrMSurfOffsetStr);
      SetAccessCommand(pCAAAfrMSurfOffsetStr,“CAAAfrOffsetSurfHdr”);
... ...
创建Surfaces子菜单命令容器并将其设置在Solids子菜单命令容器旁边。然后创建Revolution Surface命令启动器,并将其设置为Surfaces子菜单命令容器的子代,其他都是cretaed并且彼此相邻设置。
创建Workbench的资源中描述了菜单和子菜单资源以及如何提供它们。参见提供了资源和插入工作台到开始菜单的所有资源的概况创建。

提供资源并将工作台插入“开始”菜单

您应该为工作台及其所有内容提供资源。这些资源分类如下:
工作台和命令容器资源,位于两个工作台资源文件中:
资源文件包含英语的标题和帮助消息,并且可以翻译成其他语言。它使用CATNls作为后缀
资源文件包含不应翻译的图标和其他资源。后缀为CATRsc
资源文件必须具有工作台标识符作为文件名,即CAAAfrGeoCreationWkb。该标识符在声明 CreateWorkbench工作台描述类的方法,作为第三个参数NewAccess创建工作台宏。
NewAccess(CATCmdWorkbench,pCAAAfrGeoCreationWkb,CAAAfrGeoCreationWkb);
然后,工作台资源文件为CAAAfrGeoCreationWkb.CATNls和CAAAfrGeoCreationWkb.CATRsc。这些文件位于包含工作台模块的框架的CNext \ resources \ msgcatalog目录中。此目录包含子目录,每个语言都可以转换CAAAfrGeoCreationWkb.CATNls文件的标题和消息。资源文件包含:
要显示的标题,消息和图标:工作台 开始菜单
工具栏:他们的标题
菜单和子菜单:其标题,图标和助记符
图标框:他们的标题。
每个资源使用键和文本提供,或者使用没有后缀的文件名,用等号分隔。键被构建为你定义为第三参数的对象标识符的级联 NewAccess宏,一个点,一个关键字指定相应的资源。消息使用双引号括起来并以分号结尾。例如,CAAAfrGeoCreationWkb工作台标题定义如下:
CAAAfrGeoCreationWkb.Title =“CAA V5:Geometrical Creation”;
CAAAfrGeoCreationWkb.CATNls文件
此文件包含:
对于工作台本身的资源:在使用的标题 开始菜单,其相关的帮助信息,当鼠标移动到工作台图标显示简短的帮助和长帮助
工具栏和图标框的标题
菜单和子菜单的标题和助记符。
CAAAfrGeoCreationWkb.CATNls,如下所示:
// ------------------------------------------------ ----------------------------
// 工作台
// ------------------------------------------------ ----------------------------
CAAAfrGeoCreationWkb.Title =“CAA V5:Geometrical Creation”;
CAAAfrGeoCreationWkb.ShortHelp =“工作台创建几何元素”;
CAAAfrGeoCreationWkb.Help =“工作台创建几何,实体和表面元素”;
CAAAfrGeoCreationWkb.LongHelp =“这是CAA V5:几何创建工作台。
它用于演示工作台。
它包含两个工具栏:
- 一个用于某些实体元素
- 另一个为一些Surfacic元素“;

// ------------------------------------------------ ----------------------------
//工具栏
// ------------------------------------------------ ----------------------------
CAAAfrSolidEltTlb.Title =“固体”;
CAAAfrSurfacicEltTlb.Title =“表面”;

// ------------------------------------------------ ----------------------------
// SUB-MENU
// ------------------------------------------------ ----------------------------
CAAAfrSolidEltSnu.Title =“固体”;
CAAAfrSolidEltSnu.Mnemonic =“S”;

CAAAfrSurfacicEltSnu.Title =“表面”;
CAAAfrSurfacicEltSnu.Mnemonic =“u”;
CAAAfrGeoCreationWkb.CATRsc文件
此文件包含的类别,即子菜单启动 那里的工作台应该会出现菜单,图标的名称与工作台的关联开始菜单。
CAAAfrGeoCreationWkb.Category =“基础设施”;

//欢迎窗口的图标64x64
CAAAfrGeoCreationWkb.Icon.NormalPnl =“I_WkAsCAAAfrGeoCreationWkb”;
CAAAfrGeoCreationWkb.Icon.PressedlPnl =“IP_WkAsCAAAfrGeoCreationWkb”;
CAAAfrGeoCreationWkb.Icon.FocusedlPnl =“IF_WkAsCAAAfrGeoCreationWkb”;

//开始菜单的图标32x32
CAAAfrGeoCreationWkb.Icon.NormalCtx =“I_WkNvCAAAfrGeoCreationWkb”;
CAAAfrGeoCreationWkb.Icon.PressedlCtx =“IP_WkNvCAAAfrGeoCreationWkb”;
CAAAfrGeoCreationWkb.Icon.FocusedlCtx =“IF_WkNvCAAAfrGeoCreationWkb”;

//工作台工具栏的图标24x24
CAAAfrGeoCreationWkb.Icon.NormalRep =“I_WkCAAAfrGeoCreationWkb”;
CAAAfrGeoCreationWkb.Icon.PressedlRep =“IP_WkCAAAfrGeoCreationWkb”;
CAAAfrGeoCreationWkb.Icon.FocusedlRep =“IF_WkCAAAfrGeoCreationWkb”;
正是在这个文件中声明,如果工作台的热启动标准[ 3 ]。CAAGeometry文档不是热启动兼容的,因此它的工作台也不兼容。
命令头资源文件中的命令头资源:标题,消息,图标和与命令相关联的加速器。在运行时搜索的资源文件应与命令头类(即CAAAfrGeoCreationWkbHeader)具有相同的名称。
CAAAfrGeoCreationWkbHeader.CATNls文件包含以下用于Cuboid命令的文件
CAAAfrGeoCreationWkbHeader.CAAAfrCuboidHdr.Category =“Element”;
CAAAfrGeoCreationWkbHeader.CAAAfrCuboidHdr.Title =“Cuboid”;
CAAAfrGeoCreationWkbHeader.CAAAfrCuboidHdr.ShortHelp =“Cuboid”;
CAAAfrGeoCreationWkbHeader.CAAAfrCuboidHdr.Help =“Cuboid命令尚未实现”;
CAAAfrGeoCreationWkbHeader.CAAAfrCuboidHdr.LongHelp =“Cuboid(插入菜单)
Cuboid命令允许您创建一个长方体,但尚未实现。
... ...
对于每个命令,标题,短的帮助,帮助和长的帮助被声明。
对于Cuboid命令,CAAAfrGeoCreationWkbHeader.CATRsc文件包括以下内容
CAAAfrGeoCreationWkbHeader.CAAAfrCuboidHdr.Icon.Normal =“I_CAACube”;
... ...
此图标名称显示在包含Cuboid命令的“实体”工具栏中。该图标也显示在菜单中的菜单项前面。
命令启动程序资源是与命令关联的助记符。它们在运行时自动设置。
有关国际化和资源的更多信息,请参见国际化您的客户端应用程序。




页: [1]
查看完整版本: CATIA二次开发入门教程---创建工作台案例--