和何创建动态的界面:
使用动态的框架(dynamic frames):当框架消失或出现时,界面的尺寸将会被重新定义
为实现上述要求,Frame的定位方式应当为tabulation layout而不是grid layout 。
一般来说,有以下几种形式的动态界面:
1.More/Less Push Button Demonstrator
image.png
左侧的界面部分是一直可见的,并始终绑定在0号垂直线(用户设定)。
less时右侧的界面是分离的、不可见的,more时界面被扩展,扩展部分绑定在10垂直线(非0即可)上。
(1)当将
_pFrameLeftMore -> SetGridConstraints(0, 0, 1, 1, 0);
_pFrameRightMore -> SetGridConstraints(0, 1, 1, 1);
注释掉
image.png
(2)放开上述两行的注释:
image.png
(3)将_pFrameRightMore分离后设定隐藏
ResetAttachment(_pFrameRightMore);
_pFrameRightMore->SetVisibility(CATDlgHide);
image.png
在创建对话框时注意对话框的属性设定:
TSTMoreLessDialog::TSTMoreLessDialog() :
CATDlgDialog ((CATApplicationFrame::GetApplicationFrame())->GetMainWindow(),
//CAA2 WIZARD CONSTRUCTOR DECLARATION SECTION
"TSTMoreLessDialog",CATDlgWndAutoResize | CATDlgWndBtnOKCancelPreview |CATDlgWndNoResize
否则将出现重叠的错误!!!
2.The "More & Radio Button Demonstrator" Dialog box
image.png
3.The "Frame Replacement Demonstrator" Dialog box
image.png
仅仅修改对话框的类型:修改为CATDlgWndAutoResize | CATDlgWndBtnOKCancelPreview |CATDlgWndNoResize
未定义各个Frame的水平定位线时,出现上述错误!
image.png
SetHorizontalAttachment(1,CATDlgTopOrLeft,_Frame001,NULL);
SetHorizontalAttachment(2,CATDlgTopOrLeft,_Frame012,NULL);
SetHorizontalAttachment(3,CATDlgTopOrLeft,_Frame023,NULL);
image.png
void TSTFrameReplaceDialog::Build()中,如下代码:
ResetAttachment(_Frame024);
_Frame024->SetVisibility(CATDlgHide);
SetHorizontalAttachment(3,CATDlgTopOrLeft,_Frame027,NULL);
_Frame021->SetVisibility(CATDlgShow);
会出现以下问题!
image.png
去除后,消除上述问题!
CATIA中无法进行Frame中单个控件的显示隐藏,只能进行整个Frame的显示隐藏。
对于项目中出现的存在Frame嵌套的界面布局,采用设定多重frame,点击Frame中的选择控件之后,将整个Frame替换。
为了保证界面的美观性,在构造界面时不仅要定义水平定位线,还要定义垂直定位线:
_pSketchSettingFrame = new CATDlgFrame(this, "pSketchSettingFrame", CATDlgGridLayout);
SetHorizontalAttachment(HORIZONTAL_1,CATDlgTopOrLeft,_pSketchSettingFrame,NULL);
SetVerticalAttachment(VERTICAL_1,CATDlgTopOrLeft,_pSketchSettingFrame,NULL);
SetVerticalAttachment(VERTICAL_2,CATDlgRightOrBottomRelative,_pSketchSettingFrame,NULL);
在动态变换的对应函数中添加:
SetHorizontalAttachment(HORIZONTAL_4,CATDlgTopOrLeft,_pProjectPntFrame,NULL);
SetVerticalAttachment(VERTICAL_2,CATDlgRightOrBottomRelative,_pProjectPntFrame,NULL);
此处不要定义左侧定位线,否则会造成界面混乱。
网友评论