CATIA CAA 对话框基本使用指南

本文档详细说明了CATIA CAA中对话框的基本使用方式,特别关注四个核心方法:构造函数、Build方法、SetFather方法和SetVisibility方法。

1. 对话框的生命周期

在CATIA CAA中,对话框的典型生命周期包括以下步骤:

  1. 创建实例:通过构造函数创建对话框对象
  2. 构建界面:调用Build方法创建所有UI控件
  3. 设置父子关系:通过SetFather方法设置事件处理关系
  4. 显示对话框:使用SetVisibility方法控制对话框的可见性
  5. 事件处理:响应用户交互
  6. 销毁:通过RequestDelayedDestruction方法释放资源

2. 核心方法详解

2.1 构造函数

代码示例:

_pCase1Dlg = new UICase1Dlg();

UICase1Dlg的构造函数实现:

UICase1Dlg::UICase1Dlg() :
  CATDlgDialog ((CATApplicationFrame::GetApplicationFrame())->GetMainWindow(),
"UICase1Dlg",CATDlgGridLayout)
{
  _Frame001 = NULL;
  _SelectorList002 = NULL;
  _Label003 = NULL;
  _PushButton004 = NULL;
  _MultiList005 = NULL;
}

作用:

  • 初始化对话框对象并设置基本属性
  • 继承自CATDlgDialog基类,需要提供父窗口、对话框名称和布局样式
  • 在初始化列表中调用基类构造函数
  • 初始化对话框中包含的所有控件指针为NULL

参数说明:

  • 父窗口:通常使用应用程序的主窗口,通过CATApplicationFrame::GetApplicationFrame()->GetMainWindow()获取
  • 对话框名称:唯一标识符,用于资源文件和事件通知
  • 布局样式:如CATDlgGridLayout表示使用网格布局

2.2 Build方法

代码示例:

_pCase1Dlg->Build();

UICase1Dlg的Build方法实现:

void UICase1Dlg::Build()
{
  _Frame001 = new CATDlgFrame(this, "Frame001", CATDlgGridLayout);
  _Frame001 -> SetGridConstraints(0, 0, 1, 1, CATGRID_4SIDES);

  _SelectorList002 = new CATDlgSelectorList(_Frame001, "SelectorList002");
  _SelectorList002 -> SetVisibleTextHeight(1);
  _SelectorList002 -> SetGridConstraints(0, 1, 1, 1, CATGRID_4SIDES);

  // 更多控件的创建和配置...
}

作用:

  • 实际创建对话框中的所有UI控件
  • 配置每个控件的属性和布局约束
  • 建立控件之间的父子关系和层级结构
  • 设置控件的初始状态

特点:

  • Build方法不会自动调用,必须显式调用
  • 控件的创建顺序通常遵循从外到内的原则
  • 使用SetGridConstraints设置网格布局中的位置和大小
  • 可以在这里设置控件的初始属性,如可见性、高度等

2.3 SetFather方法

代码示例:

_pCase1Dlg->SetFather(this);

作用:

  • 建立对话框与其命令对象之间的父子关系
  • 设置事件通知的路由方向
  • 确保对话框的生命周期与命令对象关联
  • 允许命令对象接收和处理来自对话框的事件

重要性:

  • 如果不设置Father,对话框产生的事件将无法正确路由到命令对象
  • 影响命令对象的状态管理和事件处理流程
  • 确保对话框在命令结束时能够被正确销毁

2.4 SetVisibility方法

代码示例:

_pCase1Dlg->SetVisibility(CATDlgShow);

作用:

  • 控制对话框的显示状态
  • CATDlgShow参数表示显示对话框
  • 其他可能的参数包括CATDlgHide(隐藏)

调用时机:

  • 通常在对话框创建、构建并设置好父子关系后调用
  • 可以在需要时多次调用,以控制对话框的显示和隐藏

3. 对话框资源管理

3.1 销毁机制

在命令的析构函数中,应该正确释放对话框资源:

UICase1Cmd::~UICase1Cmd()
{
  if (_pCase1Dlg != NULL)
    _pCase1Dlg->RequestDelayedDestruction();
  // 释放其他资源...
}

注意事项:

  • 使用RequestDelayedDestruction而不是直接delete
  • 这确保了对话框在适当的时机被安全销毁
  • 对话框的子控件会被自动销毁,不需要手动释放

3.2 事件通知处理

设置对话框事件通知处理示例:

// 处理对话框关闭事件
AddAnalyseNotificationCB(_pCase1Dlg,
                       _pCase1Dlg->GetDiaCLOSENotification(),
                       (CATCommandMethod)&UICase1Cmd::ExitAction,
                       NULL);

// 处理按钮点击事件
AddAnalyseNotificationCB(_pCase1Dlg->_PushButton004,
                       _pCase1Dlg->_PushButton004->GetPushBActivateNotification(),
                       (CATCommandMethod)&UICase1Cmd::Case1PushButtonAction,
                       NULL);

4. 完整的对话框创建流程示例

结合上述四个方法,一个完整的对话框创建流程如下:

// 1. 创建对话框实例
_pCase1Dlg = new UICase1Dlg();

// 2. 构建对话框界面
_pCase1Dlg->Build();

// 3. 设置父子关系,建立事件路由
_pCase1Dlg->SetFather(this);

// 4. 显示对话框
_pCase1Dlg->SetVisibility(CATDlgShow);

// 5. 添加事件通知处理
AddAnalyseNotificationCB(_pCase1Dlg,
                       _pCase1Dlg->GetDiaCLOSENotification(),
                       (CATCommandMethod)&UICase1Cmd::ExitAction,
                       NULL);

// 6. 在命令结束时销毁对话框
// 在析构函数中调用: _pCase1Dlg->RequestDelayedDestruction();

5. 最佳实践

  1. 遵循正确的初始化顺序:构造函数 → Build → SetFather → SetVisibility
  2. 适当管理资源:使用RequestDelayedDestruction释放对话框
  3. 正确设置事件处理:确保所有需要的事件都有对应的处理函数
  4. 保持对话框简洁:避免在一个对话框中放置过多控件
  5. 使用资源文件:将文本和资源定义放在专门的资源文件中

6. 对话框定义文件

CATIA CAA对话框通常有一个对应的.CATDlg文件,用于定义对话框的结构:

CATDlgDialog UICase1Dlg
{
  STYLE = CATDlgGridLayout;
}

CATDlgFrame Frame001
{
  FATHER = UICase1Dlg;
  STYLE = CATDlgGridLayout;
  GRID = { 0, 0, 1, 1, CATGRID_4SIDES };
}

// 更多控件定义...

这个文件定义了对话框的布局结构,可以通过CAA向导自动生成。


通过以上四个核心方法的合理使用,可以在CATIA CAA中创建和管理功能完整的对话框界面。这些方法构成了CAA对话框编程的基础框架,掌握它们对于开发CATIA CAA界面至关重要。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容