环境配置获取控件运行控件建mfc对话框工程设置vc++的inc和lib路径初始化控件创建窗口、打开dwg图纸效果展示视频演示工程实例参考例程123
环境配置

使用VS进行开发,需要先安装VS2010SP1服务包,如下所示:


dd.png


dd1.png


再安装其他版本的VS,如本次演示中使用的VS2017,我们下载安装VS2017必须安装如下图所示的选项。


dd2.png

获取控件

http://www.mxdraw.com/下载控件安装包。


123.png

运行控件

运行控件安装包(自解压程序),此演示使用VC2010语言开发,如果想在除VC2010外的其他语言(如C#、VB...)、网页、或C++其他版本下使用,则需要使用控件的ActiveX版。

建mfc对话框工程

点击运行VS2017,启动后点击 左上角【文件(F)】->【新建(N)】->【项目(P)】,若正确安装VS将显示如下界面:


blob.png


可在 名称(N) 文本框内键输入项目名字,在 位置(L) 文本框内选择项目生成位置,点击确定按钮,选择“基于对话框”。如下所示:


blob.png

设置vc++的inc和lib路径

打开工程,点工程属性窗口,在属性窗口中, 将设置平台工具集为“ Visual Studio 2010 (v100)”,字符集为“ 使用 Unicode 字符集”。根据需求设置输出目录到控件\Bin\vc100x64d 目录下,在此实例中我们输出到DEBUG/64版。或将生成的EXE拷贝至上述目录下,亦可将上述目录下的环境文件拷贝至EXE所在目录下。如下所示:


blob.png


设置包含目录为控件\Src\MxDraw5.2\MxInc; 设置库目录为控件\Src\MxDraw5.2\libvc100。如下所示:


blob.png

初始化控件

stdafx.h中加入包含控件头文件代码。


#include "MxDraw.h"


CViewApp::InitInstance()中加入对初始化控件函数的调用。


BOOL CHelloMxDrawApp::InitInstance()
{
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();

	AfxEnableControlContainer();

	CShellManager *pShellManager = new CShellManager;

	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
	//////////////////////////////////////////////////////////////////////////
	MxDraw::InitMxDraw();//注册控件
	//////////////////////////////////////////////////////////////////////////
	CHelloMxDrawByCPPDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
	}
	else if (nResponse == IDCANCEL)
	{
	}
	else if (nResponse == -1)
	{
		TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
		TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
	}

	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
	ControlBarCleanUp();
#endif
	//////////////////////////////////////////////////////////////////////////
	MxDraw::UnInitMxDraw();//释放控件
	//////////////////////////////////////////////////////////////////////////
	return FALSE;
}


HelloMxDrawDlg.h中生成的Dialog类中添加控件窗口句柄的成员变量。


MxDraw::MXDRAWOCXHANDLE m_hDrawOcx;
创建窗口、打开dwg图纸

在面板中添加一个Group Box来制定控件界面大小、添加两个按钮,分别为“打开DWG”和“Hello World”,如下:


blob.png


Group Box设置为不可见:


blob.png


包含资源文件


#include "resource.h"


在HelloMxDrawDlg.cpp的OnInitDialog()函数中添加如下代码:


	// TODO: 在此添加额外的初始化代码
	CRect rcPos;
	GetDlgItem(IDC_RANGE_STATIC)->GetWindowRect(rcPos);
	
	m_hDrawOcx = MxDraw::CreateMxDraw(this, rcPos, MxDraw::kShowCmdLineWindow);
	ASSERT(m_hDrawOcx != NULL);


为“打开DWG”按钮增加单击事件,在事件中添加如下代码:


	// TODO: 在此添加控件通知处理程序代码
	CFileDialog openDlg(TRUE, _T("dwg"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("dwg(*.dwg) | *.dwg||"), this);

	CString sFileName;

	//打开对话的初始路径
	openDlg.m_ofn.lpstrInitialDir = _T("C:\\");

	//显示打开文件的对话框
	if (openDlg.DoModal() == IDOK)
		sFileName = openDlg.GetPathName();
	else
		return;

	//打开dwg文件,并显示
	if (!MxDraw::ReadDwg(m_hDrawOcx, sFileName))
	{
		CString sError;
		sError.Format(_T("打开dwg文件%s失败"), sFileName);
		AfxMessageBox(sError);
	}


为“Hello World”按钮增加单击事件,在事件中添加如下代码:


void CHelloMxDrawByCPPDlg::OnBnClickedHelloworldButton()
{
// 通过 新建(读取空文件) 来清空当前空间  
MxDraw::ReadDwg(MxDraw::GetCurOcxHandle(), _T(""));
 
// 定义文字对象。
McDbText * pText = new McDbText(
McGePoint3d(100, 100, 0), //文字位置
L"Hello World",    //文字内容
McDbObjectId::kNull,  //文字样式,为空则取当前默认样式
200.0      //文字高度
);
 
// 设置文字颜色.
pText->setColorIndex(Mx::mcedRGB2Index(RGB(255, 0, 0)));
 
// 添加当前图形数据库中
MrxDbgUtils::addToCurrentSpaceAndClose(pText);
 
// 显示局中.
Mx::ZoomE();
 
// 刷新
MxDraw::UpdateDisplay(MxDraw::GetCurOcxHandle());
}
效果展示

至此就是在VC++完成的一个用控件“打开DWG”的入门功能,我们编译生成exe文件,    如果我们设置了输出到控件\Bin\vc100x64d\...直接运行即可;    或者将控件\Bin\vc100x64d\下的文件拷贝至生成的EXE所在目录下。运行效果如下:


hw.png

视频演示

工程实例

添加

参考例程

更多的实例代码在控件\Src\MxDraw5.2\samples下可找到。如Edit,MxDrawCADTools,MxDrawOcx,ExApp,CustomEntity,MxExpressTools。

123

ujuu

MxDraw
MxDraw是由梦想凯德基于AutoDesk CAD平台开发的软件,拥有完全自主的核心技术和知识产权。MxDraw致力于为各企业提供最优秀的CAD平台整体解决方案。
技术服务
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
产品购买
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
用户交流
QQ群1:827867134
QQ群2:827867134
QQ群3:827867134