📄
字号:
2003年末的时候,已经在一个项目中开始使用Matlab提供的数学函数库.效果不错.当时就想要是能够将Matlab中简单丰富的画图功能也嵌入到我的程序中而不启动Matlab环境那多好啊!
当时好像就是在simwe论坛上看到了一个帖子讲如何使用Matlab的图形函数库.也实现了一些功能,不过美中不足的是画出的图象是单独一个窗口,一看就是Matlab风格的.后来项目终止了,这个愿望也只能暂时的封存了.
后来在simwe论坛上看到SCIE的帖子,在VC中实现了Matlab图像的嵌入,感到很是振奋.不过一直没有时间好好看看他提供的源代码.
今年终于有了机会.好好看了SCIE的VC的源代码,剔除其中VC相关界面的代码,找到了核心所在:将figure函数返回的Figure句柄的父窗口设为我指定的窗口,去掉边框等饰物,就可以显现嵌入的效果了.由于我们的项目用的是BCB开发的,于是就在BCB环境下实现了Matlab图像的嵌入.
有几点和SCIE说的不尽相同:
1.mlfHGWaitForFiguresToDie();不用删掉,在调用完画图函数
(如Vplot(HX_DOT/28, HY_DOT/28, Redone, nx/28,ny/28, Blueone,
mwArray("Parent"), Form1->h_a);
mwArray h_f = get(Form1->h_a, mwArray("Parent"));
Vset(h_f, mwArray("Visible"), mwArray("On"));)
)后再使用mlfHGWaitForFiguresToDie();即可.
2.由于是创建了一个新窗口来容纳Figure句柄,因此退出时仅仅关闭主窗口是不行的,要在OnClose()函数中加入关闭Figure的代码:Vclose(mwArray("all"));
另外一个我想提的注意是对于Matlab中图像函数的操作一定要在初始化图像函数库后才能调用,不然会出现"需要C/C++函数库"的错误提示(这个提示让我困惑了好久)
其他就如SCIE所说,
libmmfileInitialize();
libmwsglmInitialize();
mlfHGInitialize(NULL,NULL);
要放在初始化窗口时调用,
mlfHGTerminate();
libmmfileTerminate();
libmwsglmTerminate();
要放在OnDestory()里调用。
对了,还有就是那几个lib文件,如果有def文件的话就从def文件创建;
如果没有的话可以先安装mglinstaller.exe,再由安装生成的dll文件生成(用implib命令)。
再次感谢simwe论坛,感谢SCIE,cwit等人无私奉献!!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -