本文檔詳細說明了CATIA CAA中對話框的基本使用方式,特別關注四個核心方法:構造函數(shù)、Build方法、SetFather方法和SetVisibility方法。
1. 對話框的生命周期
在CATIA CAA中,對話框的典型生命周期包括以下步驟:
- 創(chuàng)建實例:通過構造函數(shù)創(chuàng)建對話框對象
- 構建界面:調(diào)用Build方法創(chuàng)建所有UI控件
- 設置父子關系:通過SetFather方法設置事件處理關系
- 顯示對話框:使用SetVisibility方法控制對話框的可見性
- 事件處理:響應用戶交互
- 銷毀:通過RequestDelayedDestruction方法釋放資源
2. 核心方法詳解
2.1 構造函數(shù)
代碼示例:
_pCase1Dlg = new UICase1Dlg();
UICase1Dlg的構造函數(shù)實現(xiàn):
UICase1Dlg::UICase1Dlg() :
CATDlgDialog ((CATApplicationFrame::GetApplicationFrame())->GetMainWindow(),
"UICase1Dlg",CATDlgGridLayout)
{
_Frame001 = NULL;
_SelectorList002 = NULL;
_Label003 = NULL;
_PushButton004 = NULL;
_MultiList005 = NULL;
}
作用:
- 初始化對話框對象并設置基本屬性
- 繼承自CATDlgDialog基類,需要提供父窗口、對話框名稱和布局樣式
- 在初始化列表中調(diào)用基類構造函數(shù)
- 初始化對話框中包含的所有控件指針為NULL
參數(shù)說明:
-
父窗口:通常使用應用程序的主窗口,通過
CATApplicationFrame::GetApplicationFrame()->GetMainWindow()獲取 - 對話框名稱:唯一標識符,用于資源文件和事件通知
-
布局樣式:如
CATDlgGridLayout表示使用網(wǎng)格布局
2.2 Build方法
代碼示例:
_pCase1Dlg->Build();
UICase1Dlg的Build方法實現(xiàn):
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);
// 更多控件的創(chuàng)建和配置...
}
作用:
- 實際創(chuàng)建對話框中的所有UI控件
- 配置每個控件的屬性和布局約束
- 建立控件之間的父子關系和層級結構
- 設置控件的初始狀態(tài)
特點:
- Build方法不會自動調(diào)用,必須顯式調(diào)用
- 控件的創(chuàng)建順序通常遵循從外到內(nèi)的原則
- 使用SetGridConstraints設置網(wǎng)格布局中的位置和大小
- 可以在這里設置控件的初始屬性,如可見性、高度等
2.3 SetFather方法
代碼示例:
_pCase1Dlg->SetFather(this);
作用:
- 建立對話框與其命令對象之間的父子關系
- 設置事件通知的路由方向
- 確保對話框的生命周期與命令對象關聯(lián)
- 允許命令對象接收和處理來自對話框的事件
重要性:
- 如果不設置Father,對話框產(chǎn)生的事件將無法正確路由到命令對象
- 影響命令對象的狀態(tài)管理和事件處理流程
- 確保對話框在命令結束時能夠被正確銷毀
2.4 SetVisibility方法
代碼示例:
_pCase1Dlg->SetVisibility(CATDlgShow);
作用:
- 控制對話框的顯示狀態(tài)
-
CATDlgShow參數(shù)表示顯示對話框 - 其他可能的參數(shù)包括
CATDlgHide(隱藏)
調(diào)用時機:
- 通常在對話框創(chuàng)建、構建并設置好父子關系后調(diào)用
- 可以在需要時多次調(diào)用,以控制對話框的顯示和隱藏
3. 對話框資源管理
3.1 銷毀機制
在命令的析構函數(shù)中,應該正確釋放對話框資源:
UICase1Cmd::~UICase1Cmd()
{
if (_pCase1Dlg != NULL)
_pCase1Dlg->RequestDelayedDestruction();
// 釋放其他資源...
}
注意事項:
- 使用
RequestDelayedDestruction而不是直接delete - 這確保了對話框在適當?shù)臅r機被安全銷毀
- 對話框的子控件會被自動銷毀,不需要手動釋放
3.2 事件通知處理
設置對話框事件通知處理示例:
// 處理對話框關閉事件
AddAnalyseNotificationCB(_pCase1Dlg,
_pCase1Dlg->GetDiaCLOSENotification(),
(CATCommandMethod)&UICase1Cmd::ExitAction,
NULL);
// 處理按鈕點擊事件
AddAnalyseNotificationCB(_pCase1Dlg->_PushButton004,
_pCase1Dlg->_PushButton004->GetPushBActivateNotification(),
(CATCommandMethod)&UICase1Cmd::Case1PushButtonAction,
NULL);
4. 完整的對話框創(chuàng)建流程示例
結合上述四個方法,一個完整的對話框創(chuàng)建流程如下:
// 1. 創(chuàng)建對話框實例
_pCase1Dlg = new UICase1Dlg();
// 2. 構建對話框界面
_pCase1Dlg->Build();
// 3. 設置父子關系,建立事件路由
_pCase1Dlg->SetFather(this);
// 4. 顯示對話框
_pCase1Dlg->SetVisibility(CATDlgShow);
// 5. 添加事件通知處理
AddAnalyseNotificationCB(_pCase1Dlg,
_pCase1Dlg->GetDiaCLOSENotification(),
(CATCommandMethod)&UICase1Cmd::ExitAction,
NULL);
// 6. 在命令結束時銷毀對話框
// 在析構函數(shù)中調(diào)用: _pCase1Dlg->RequestDelayedDestruction();
5. 最佳實踐
- 遵循正確的初始化順序:構造函數(shù) → Build → SetFather → SetVisibility
- 適當管理資源:使用RequestDelayedDestruction釋放對話框
- 正確設置事件處理:確保所有需要的事件都有對應的處理函數(shù)
- 保持對話框簡潔:避免在一個對話框中放置過多控件
- 使用資源文件:將文本和資源定義放在專門的資源文件中
6. 對話框定義文件
CATIA CAA對話框通常有一個對應的.CATDlg文件,用于定義對話框的結構:
CATDlgDialog UICase1Dlg
{
STYLE = CATDlgGridLayout;
}
CATDlgFrame Frame001
{
FATHER = UICase1Dlg;
STYLE = CATDlgGridLayout;
GRID = { 0, 0, 1, 1, CATGRID_4SIDES };
}
// 更多控件定義...
這個文件定義了對話框的布局結構,可以通過CAA向導自動生成。
通過以上四個核心方法的合理使用,可以在CATIA CAA中創(chuàng)建和管理功能完整的對話框界面。這些方法構成了CAA對話框編程的基礎框架,掌握它們對于開發(fā)CATIA CAA界面至關重要。