返回介绍

通用的函数

发布于 2023-08-09 23:10:33 字数 2312 浏览 0 评论 0 收藏 0

打开CAD图纸:

在“打开图纸”按钮的单击事件中,我们添加如下函数:

void CTechXDataDlg::OnBnClickedOpenMap()
{
	acDocManager->sendStringToExecute(Mx::mcdbCurDwg()->GetDocument(), L"OpenDwg");
}

事件中的代码大意为调用我们之前准备的命令,接口如下:

	// Summary:
	// 		向控件发送一个命令,并执行该命令
	// Parameters:
	// 		pAcTargetDocument	-	执行命令的对象
	//		pszExecute			-	执行命令的对象
	//		bActivate			-	暂没有使用
	//		bWrapUpInactiveDoc	-	暂没有使用
	//		bEchoString			-	暂没有使用
	//		pParam				-   执行命令时,可以带参数执行,用户不需要负责它的内存释放,将由sendStringToExecute函数自动释放
	// Returns:
	// 		如果成功返回Mcad::eOk,如果传递的数据非法则返回Mcad::eInvalidInput
	virtual Mcad::ErrorStatus sendStringToExecute(McApDocument* pAcTargetDocument,
		LPCTSTR pszExecute,
		bool bActivate = true,
		bool bWrapUpInactiveDoc = false,
		bool bEchoString = true,
		struct resbuf* pParam = NULL,
		bool bFunCall = false
		) = 0;

而调用的命令,我们需要做出如下的准备,如“选择实体”按钮单击事件中的代码段:

void CTechXDataDlg::OnBnClickedChooseButton()
{
	Mx::mcDocManager()->sendStringToExecute(MxDraw::GetDatabase(m_hDrawOcx)->GetDocument()
		, _T("CET"));

	InitToPanle();
}

我们调用的“CET”命令,该命令为我们的自定义命令,我们做出了如下的声明及实现:

blob.png

命令代码声明如下:

static void ChooseEnt();

命令代码实现如下:

void CTechXDataDlg::ChooseEnt()
{
	MrxDbgUiPrEntity mChooseEnt(L"选择一个实体");
	if (MrxDbgUiPrBase::kOk == mChooseEnt.go())
	{
		m_mId = mChooseEnt.objectId();
	}
	else
	{
		m_mId.setNull();
	}
}

在完成命令的具体功能之后,我们将其注册到系统,以供调用,注册命命令声明如下:

static void RegisterCommand();

实现如下:

void CTechXDataDlg::RegisterCommand()
{
	acedRegCmds->addCommand(_T("SysCmd"), _T("CET"), _T("CET"),
		MCRX_CMD_MODAL, ChooseEnt);
}

我们在面板的初始化函数中调用它:

blob.png

至此我们即完成了自定义命令的所有步骤,需要说明的是,与用户交互的操作,比如我们的自定义命令“ChooseEnt”即是提示用户选择一个实体,必须放在自定义命令中执行。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文