« 上一篇: Why do I receive a set_param Warning or Error when Using MATLAB Compiler 4.0 (R14)? 下一篇: C++的BP算法源程序【转载】 »
山城棒棒儿军 @ 2004-06-25 12:00

最近自己不是很空
只有看看各个论坛的靖华
先收集于此了


虽然MATLAB可以制作GUI界面,但其界面元素还是太少,而且当界面元素教多时会严重影响执行速度。

用VC来制作GUI界面不但界面元素丰富而且可以定制,可以实现非常美观的界面,而且能够保证复杂界面的执行速度,但MATLAB的图形输出只能在自己的Figure窗口上,无法完美融合到VC做的界面中,这是用VC做界面的最大障碍。

本程序尝试将MATLAB的Figure窗口嵌入到VC窗口中,实现MATLAB窗口与VC 窗口的结合。

示例程序效果示意图如下:




怎样消除的闪烁现象啊 ???
原来的做法是先生成一个可见绘图窗口,再把它调整到指定位置,所以会有闪烁现象。
现在的做法是生成不可见绘图窗口,把它调整到指定位置后再显示出来,这样就不闪了。

图形还是画到MATLAB的Figure窗口上,我只是把MATLAB的Figure窗口去掉标题栏、去掉边框并且固定到VC窗口的指定位置,以模拟图形绘制到VC窗口上的效果。这样做还有一个好处,就是原先Figure窗口的鼠标、键盘的回调函数仍然可以使用。

// 查找窗口
HWND hFig = ::FindWindow(NULL,FigName);
if(hFig == NULL)
{
AfxMessageBox("δÄܲúÉúFigure´°¿Ú£¬Í¼ÐλæÖÆÊ§°Ü£¡");
return;
}

// 去掉figure窗口的标题栏和边框
long lStyle = ::GetWindowLong(hFig,GWL_STYLE);
::SetWindowLong(hFig,GWL_STYLE,lStyle & (~WS_CAPTION) & (~WS_THICKFRAME));
::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);

//获取绘图区域的大小和位置
RECT PlotRec;
CWnd *PlotArea = GetDlgItem(IDC_PLOTAREA);
PlotArea->GetWindowRect(&PlotRec);
long Width = PlotRec.right - PlotRec.left;
long Height = PlotRec.bottom - PlotRec.top;

// 设置figure窗口为绘图区域窗口的子窗口并调整位置
::SetParent(hFig,PlotArea->GetSafeHwnd());
::SetWindowPos(hFig,NULL,1,1,Width-3,Height-3,SWP_NOZORDER | SWP_NOACTIVATE);

// 绘制图形
DrawLine();

// 设置可见
SetVisible(h_a,mwArray("On"));


最新评论 (点击这里查看更早的所有评论...)


snowscream

2005-06-09 19:01

Genial,果真是好厉害哦,就是那个numbertitle的问题呢,我已经可以找到这个FIGURE窗的句柄了,呵呵,谢谢指教!
好高兴……
真的很感谢!



stone

2005-06-22 15:03

推荐看一下:
精通Matlab与C/C++混合程序设计
http://www.buaapress.com.cn/buaa/html/book/view.asp?id=1276&cat_f=计算机系列&cat_s=办公自动化及其他
内容简介     本书主要介绍如何运用Matlab与C/C++进行混合程序设计。本书全面详细介绍了Matlab C数学库、Matlab C++数学库、Matcom、Matlab COM Builder、Matlab Engine及编译Matlab独立可执行程序等Matlab混合程序设计的内容。

   本书共分为7章,主要内容包括:Matlab编程的基础知识、Matlab C语言接口、如何生成可独立运行的Matlab程序、在Visual C++中调用Matlab程序、Matcom、Matlab COM Builder与Visual C++混编程以及在Visual C++中调用Matlab C++数学库。本书各章都包含大量的实例程序,可供寻求将Matlab程序脱离Matlab环境的Matlab程序设计人员、寻求高效算法库的C/C++开发人员学习和参考。

   本书采用的开发和运行环境为:Visual C++ 6.0与Matlab 6.5。




stone

2005-06-22 15:04

推荐看一下:
精通Matlab与C/C++混合程序设计
http://www.buaapress.com.cn/buaa/html/book/view.asp?id=1276&cat_f=计算机系列&cat_s=办公自动化及其他
内容简介     本书主要介绍如何运用Matlab与C/C++进行混合程序设计。本书全面详细介绍了Matlab C数学库、Matlab C++数学库、Matcom、Matlab COM Builder、Matlab Engine及编译Matlab独立可执行程序等Matlab混合程序设计的内容。

   本书共分为7章,主要内容包括:Matlab编程的基础知识、Matlab C语言接口、如何生成可独立运行的Matlab程序、在Visual C++中调用Matlab程序、Matcom、Matlab COM Builder与Visual C++混编程以及在Visual C++中调用Matlab C++数学库。本书各章都包含大量的实例程序,可供寻求将Matlab程序脱离Matlab环境的Matlab程序设计人员、寻求高效算法库的C/C++开发人员学习和参考。

   本书采用的开发和运行环境为:Visual C++ 6.0与Matlab 6.5。




zz

2005-10-06 17:13

Matlab与C/C++混合编程,能用图形工具箱中的函数吗,例如sobel()函数



宁子

2005-10-08 10:10

请问知不知道IDEA加密芯片哪个公司生产?我找到一家瑞士公司,发email索要说明,但是没有回应。
不知道matlab能不能运行c语言的程序呢?怎么运行呢



Genial

2005-10-09 07:55

可以用C写mex程序在matlab中调用,matlab的新版本还可以调用通用的dll,当然,c写的sfunction在matlab中也可以用,matlab中的很多硬件驱动都是用c写的sfunction。

高版本的matlab混编一般是可以用那些函数的,不过如果你是做产品,建议搜索,有VC版本的图像处理的例



化一

2006-06-11 10:31

#include "engine.h"
#include "stdio.h"
#include "string.h"
void main()
{ Engine *ep;
ep=engOpen(NULL);
engEvalString(ep,"WDPS_T1=csvread('WDPS_T1.dat');");//我从自己机子上载入了数据。这个命令在matlab中执行是正确的,显示也正常
engEvalString(ep,"subplot(2,1,1);plot(WDPS_P1);");
}



bywater

2006-12-06 20:14

请问genial:我在matlab中用一个函数来绘图figure,在vc中利用findwindow来获取这个图形的句柄,但是经过测试,必须在调用findwinow前作一定的延迟才能找到figure窗口。问:在vc中该如何判断调用matlab函数后,什么时候figure已经绘制好?我是vc.net&matlab7



小军

2007-08-20 00:00 匿名 219.245.*.*

我也想将matlab的图形窗口嵌入到Vc界面 中,接口用的是调用动态链接库,然后
HWND hFig = ::FindWindow(NULL,“Figure No1”);
不行,麻烦 楼主帮我解决下,发我邮箱里,谢谢了~



leo

2008-07-02 11:49 匿名 60.28.*.*

请问:如何在VC界面中显示用MATLAB程序绘制的三维图形!麻烦楼主指教,可以的话就发我邮箱吧,谢谢了^_^!


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定