我在AutoCAD二次开发中嵌入EasyX,当关闭initgraph()创建的绘图窗口时,AutoCAD应用程序也会跟着一起被关闭。

0

我使用 Visual Studio 2017 开发 AutoCAD Objectarx 的应用程序(实际上是一个嵌入到CAD中的动态链接库)。EasyX编译顺利,我在AutoCAD命令栏中调用绘图命令,也成功绘制了图像,而且EasyX绘图窗口还获取了AutoCAD的图标,效果很美观。

但是有一个致命的问题,如果我手动点击EasyX绘图窗口右上方的关闭按钮,不仅EasyX绘图窗口被关闭了,连带我的AutoCAD主窗口也直接crash掉了。这个我猜测是EasyX库内部就是设计成这样的,有什么办法解决这个问题吗?

void CEasyXOperation::testEasyX()
{
	initgraph(640, 480);	// 创建绘图窗口,大小为 640x480 像素
	circle(200, 200, 100);	// 画圆,圆心(200, 200),半径 100
}
ava
清月近人

2023-7-11

0

可以通过 initgraph 的第三个参数,禁用窗口关闭功能。这样做:

void CEasyXOperation::testEasyX()
{
	initgraph(640, 480, EX_NOCLOSE);	// 创建绘图窗口,大小为 640x480 像素
	circle(200, 200, 100);	// 画圆,圆心(200, 200),半径 100
}
ava
慢羊羊

2023-7-13

我尝试了这个功能,并测试了保存图像功能,代码运行正常,功能实现良好。但是,closegraph()函数可能仅仅是隐藏了绘图窗口,并没有正真销毁绘图窗口。因为当我在 AutoCAD 中卸载包含 EasyX 库的dll文件的时候,AutoCAD主窗口也直接crash掉了。所以,这个可能是设计上的问题,希望将来能够修复。感谢!测试代码如下:void CEasyXOperation::testCreateImage(){ initgraph(640, 480, EX_NOCLOSE); outtextxy(100, 100, _T("Hello World!")); saveimage(_T("D:\\test.bmp")); closegraph();} - 清月近人 2023-7-14
@清月近人 方便留个联系方式吗?我 QQ:16491848,可以加我,详细说下。 - 慢羊羊 2023-7-15
技术讨论社区