引言
简单的功能,直接点击按钮就完成了。比如“保存”命令。而复杂的功能,往往需要借助对话框实现。那么这一节,给大家介绍怎么用对话框来完成创建线的命令。
操作
- 在FirstModule新建,IDDTemplates.




2. 点击“视图-工具箱”,我们就可以对对话框进行编辑,增加控件等。


- 增加相关代码,右键点击对话框,查看.h 和 .cpp文件。注意,必须要通过这种途径打开的.h 和.cpp文件,才能对其进行有效更改。如图所示,不能更改的地方都用灰色高亮了。能改的地方只有在 begin of user code 和 end of user code 之间。若采用其他途径打开,则更改的地方不会应用,并且关闭对话框后,不会保存更改痕迹。


- 把新建对话框添加到FirstCmd的构造函数中。这样就可以在点击命令的时候,弹出对话框。
#include "../LocalGenerated/win_b64/FirstDlg.h"
FirstCmd::FirstCmd() :
CATStateCommand ("FirstCmd", CATDlgEngOneShot, CATCommandModeShared)
// Valid states are CATDlgEngOneShot and CATDlgEngRepeat
,_Indication(NULL)
{
FirstDlg * pDlg = new FirstDlg((CATApplicationFrame::GetApplicationFrame())->GetMainWindow(), "DlgMeasure");
pDlg->Build();
pDlg->SetVisibility(CATDlgShow);
}

-
实现相关响应。上述对话框,点击“X”是没反应的。那是因为我们还没设置回调函数。怎么设置回调。打开对话框文件,点击callbacks view,点击相关控件,即可创建对应回调函数。

创建的点击OK的回调函数如下。点击后获得两个点的坐标,并创建一条直线。相应头文件和.mk文件,可以参照第4篇[[4. 新建命令]]中查看输出来完成。
void FirstDlg::FirstDlg_OKBtnPushed(
CATCommand * ipControl,
CATNotification * ipNotification,
CATCommandClientData iUsefulData)
{
// Begin of User Code
// 1. Get value
double x1 = _X1->GetValue();
double y1 = _Y1->GetValue();
double z1 = _Z1->GetValue();
double x2 = _X2->GetValue();
double y2 = _Y2->GetValue();
double z2 = _Z2->GetValue();
// 2. create line
CATFrmEditor * pEditor = CATFrmEditor::GetCurrentEditor();
CATDocument * pDoc = pEditor->GetDocument();
CATIContainerOfDocument * pCtnDoc = NULL;
pDoc->QueryInterface(IID_CATIContainerOfDocument, (void**)&pCtnDoc);
CATIContainer * pCtn = NULL;
pCtnDoc->GetSpecContainer(pCtn);
CATIGSMFactory_var pFac = pCtn;
double pnt1[3] = { x1, y1, z1 };
double pnt2[3] = { x2, y2, z2 };
CATIGSMLine_var line = pFac->CreateLinePtPt(pnt1, pnt2);
// 3. update
CATIGSMProceduralView_var view = line;
view->InsertInProceduralView();
CATISpecObject_var spLine = line;
spLine->Update();
// End of User Code
}
- 编译通过后,新建part,点击命令,输入坐标,点击确定,获得直线。

注意
在对话框相关的文件中,请勿出现中文,否则会变成乱码。包括:.DSGen, .h, .cpp文件。
9329

被折叠的 条评论
为什么被折叠?



