C++ ARX二次开发-MFC 模态对话框modal dialog

一、本节课程
C++ ARX二次开发-MFC 模态对话框modal dialog

、本节要讲解的知识点

1、使用MFC的对话框在ObjectARX应用程序中创建模态对话框的一般过程。

2、使用基于ObjectARX的对话框创建与AutoCAD风格相同的用户界面,以及隐藏模态对话框和AutoCAD进行交互的方法。

三、具体内容

1、思路:

在ObjectARX中显示一个模态对话框非常简单,只需要创建一个对话框,并将其余CDialog或其派生类相关联,调用CDialog类的DoModal函数即可。

在ObjectARX中,以AcUi开头的类用于创建与AutoCAD风格一致的用户界面,这组类从MFC继承,除了具有基类的特性外,还引入一些在AutoCAD中特有的特性。

2、实现:
(1)直接使用MFC

1)打开VS2012 ,新建一个ARX项目,需要勾选:在共享的MFC库里面使用MFC,其他的可以保持默认。

2)添加对话框资源,在解决方案资源管理器的.rc文件双击,就会弹出资源视图。在资源视图界面,点击右键插入对话框资源。

 

在资源设计视图里面:标题和ID等内容可以进行修改。根据需要添加其他需要添加的控件。

3)为对话框资源添加对应的类。就是在对话框设计视图双击就行,就会弹出对应的对话框用来新建对话框类的,确定后就会生成两个文件  对话框类.h 对话框类.Cpp文件。

此时需要注意的是,若工程编译不成功,就需要在“对话框类.h”  #include "resource.h"

4)需要在acrxEntryPoint.cpp文件里面去添加命令的定义,还有命令的实现函数,用来使用我们的对话框的(要使用CMfcDialog类,需要在开头处添加头文件的包含#include "MfcDialog.h")。

ACED_ARXCOMMAND_ENTRY_AUTO(CModalDialogApp, yunyouMyGroup, MfcModal, MfcModal, ACRX_CMD_MODAL, NULL)

 

static void yunyouMyGroupMfcModal () {

CMfcDialog theDialog;

if (theDialog.DoModal()==IDOK)

{

AfxMessageBox(TEXT("点击确定关闭了对话框!"));

}

}

5)编译和测试(编译时注意与自己的机器平台一致,win32还是 X64)。

 

 

(2)使用ObjectARX基于MFC的类库(AcUi打头的类库)

1)添加类

 

 

2)添加成员变量

 

3)添加消息响应函数

 

//-----------------------------------------------------------------------------

//----- ArxDialog.h : Declaration of the CArxDialog

//-----------------------------------------------------------------------------

#pragma once

//-----------------------------------------------------------------------------

#include "acui.h"

#include "c:\arxapi\objectarx 2016\inc\acuibutton.h"

#include "c:\arxapi\objectarx 2016\inc\acuibutton.h"

#include "c:\arxapi\objectarx 2016\inc\acuiedit.h"

#include "c:\arxapi\objectarx 2016\inc\acuiedit.h"

#include "c:\arxapi\objectarx 2016\inc\acuiedit.h"

#include "c:\arxapi\objectarx 2016\inc\acuiedit.h"

//-----------------------------------------------------------------------------

class CArxDialog : public CAcUiDialog {

DECLARE_DYNAMIC (CArxDialog)

public:

CArxDialog (CWnd *pParent =NULL, HINSTANCE hInstance =NULL) ;

enum { IDD = IDD_ARX_MODAL} ;

protected:

virtual void DoDataExchange (CDataExchange *pDX) ;

afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

DECLARE_MESSAGE_MAP()

public:

CAcUiPickButton m_btnAngle;

CAcUiPickButton m_btnPick;

CAcUiAngleEdit m_editAngle;

CAcUiNumericEdit m_editXPt;

CAcUiNumericEdit m_editYPt;

CAcUiNumericEdit m_editZPt;

CString m_strAngle;

CString m_strZPt;

CString m_strYPt;

CString m_strXPt;

void DisplayPoint();

void DisplayAngle();

virtual BOOL OnInitDialog();

virtual void OnClose();

afx_msg void OnClickedButtonAngle();

afx_msg void OnClickedButtonPoint();

afx_msg void OnKillfocusEditAngle();

afx_msg void OnKillfocusEditXpt();

afx_msg void OnKillfocusEditYpt();

afx_msg void OnKillfocusEditZpt();

} ;

 

//-----------------------------------------------------------------------------

//----- ArxDialog.cpp : Implementation of CArxDialog

//-----------------------------------------------------------------------------

更多代码需要加入yunyou.ke.qq.com在线学习,方可获得。

//-----------------------------------------------------------------------------

//----- acrxEntryPoint.cpp

//-----------------------------------------------------------------------------

#include "StdAfx.h"

#include "resource.h"

#include "MfcDialog.h"

#include "ArxDialog.h"

//-----------------------------------------------------------------------------

#define szRDS _RXST("yunyou")

//-----------------------------------------------------------------------------

//----- ObjectARX EntryPoint

class CModalDialogApp : public AcRxArxApp {

public:

CModalDialogApp () : AcRxArxApp () {}

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {

AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;

return (retCode) ;

}

virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {

AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;

return (retCode) ;

}

virtual void RegisterServerComponents () {

}

static void yunyouMyGroupMfcModal () {

CMfcDialog theDialog;

if (theDialog.DoModal()==IDOK)

{

AfxMessageBox(TEXT("点击确定关闭了对话框!"));

}

}

static void yunyouMyGroupArxModal () {

CAcModuleResourceOverride resOverride;

CArxDialog theDialog;

theDialog.DoModal();

}

} ;

//-----------------------------------------------------------------------------

IMPLEMENT_ARX_ENTRYPOINT(CModalDialogApp)

ACED_ARXCOMMAND_ENTRY_AUTO(CModalDialogApp, yunyouMyGroup, MfcModal, MfcModal, ACRX_CMD_MODAL, NULL)

ACED_ARXCOMMAND_ENTRY_AUTO(CModalDialogApp, yunyouMyGroup, ArxModal, ArxModal, ACRX_CMD_MODAL, NULL)

总结

1、使用MFC是ObjectARX程序创建丰富界面的重要途径,商业ARX程序无一不使用MFC。

2、模态对话框显示的一般步骤。

3、处理对话框事件。

4、使用与AUTODESK风格一致的控件。

5、隐藏对话框和AUTOCAD进行交互的方法。

6、将CString类型的变量转为double类型。

7、用户手工修改文本框内容之后,更新成员变量的方法。

猜你喜欢

转载自blog.csdn.net/yunyouxy/article/details/81571218