找回密码
 注册
Simdroid-非首页
查看: 69|回复: 0

matlab图形窗口嵌入MFC界面显示问题求助

[复制链接]
发表于 2011-2-22 10:14:53 | 显示全部楼层 |阅读模式 来自 广东深圳
各位老大好,本人最近在做一个MFC+Matlab混合编程的项目,混编方式是采用的利用deploytool将matlab函数编译成DLL后进行调用。主要功能:点击MFC界面按钮,调用matlab函数LTE_Topology,绘制出TOPO图然后显示在界面控件的指定位置。这里遇到了一个让我头大的问题(之前在SIMWE及Baidu上搜索过,但都没找到明确的解决方法)。相关的函数如下(由于在一个比较BT的公司做项目,代码都在远程服务器上,无法复制粘贴到本地,只能在这里手敲部分代码,问题应该定位在下面这个函数)

/*函数功能:根据窗口名字wndname,调用findwindow函数,找到matlab图像窗口句柄,然后使用MoveWindow函数将该matlab窗口嵌入到hWnd所对应的MFC外层窗口里*/

BOOL CPublic::DrawOnMFC(CString wndname, HWND hWnd, int ID_CONTROL)
{
CRect figure_rect, StatRec;//定义两个CRECT对象,前者是matlab图像窗口的放置区域,后者是外层窗口区域
CWnd * CStat=CWnd::FromHandle(hWnd);
int looptime=0;
long stat_width=0, stat height=0, statx=0, staty=0, fig_width=0, fig_height=0, figx=0,figy=0, left=0,top=0,lStyle=0;//变量定义及初始化
HWND hFig=::FindWindow(NULL,wndname);

/*疑问1::仅做一次FindWindow无法找出窗口句柄,必须加上如下循环查找许多次才能找到matlab窗口句柄,这是为什么呢?是FindWindow函数的缺陷吗?*/

while(hFig==NULL&&looptime<LOOPTIME) //LOOPTIME为宏定义,60000
{
hFig=::FindWindow(NULL,wndname);
looptime++
}
if(hFig==NULL)
{
return FALSE;
}
::SetParent(hFig,hWnd);//将matlab图像窗口设为外层窗口的子窗口
stat_width=StatRec.Width();
stat_height=StatRec.Height();
statx=StatRec.TopLeft().x;
staty=StatRec.TopLeft().y;
HWND hFigure=GetDlgItem(hWnd,ID_CONTROL);//拿到ID_CONTROL所对应控件的窗口句柄
/*这一段代码的作用是求出ID_CONTROL所对应的矩形区域左上角相对外层窗口的坐标
即left和top,通过拿到这两个坐标才能将matlab图像窗口准确移到ID_CONTROL控件所对应的区域*/
CWnd * figure=CWnd::FromHandle(hFigure);
figure->GetWindowRect(&figure_rect);
fig_width=figure_rect.Width();
fig_height=figure_rect.Height();
figx=figure_rect.TopLeft().x;
figy=figure_rect.TopLeft().y;
left=figx-statx;
top=figy-staty;
/*设定matlab图像窗口的风格*/
lStyle=::GetWindowLong(hFig,GWL_STYLE);
::SetWindowLong(hFig,GWL_STYLE&WS_CAPTION&(WS_MAXIMIZE));
/*将matlab图像窗口嵌入到外层窗口指定矩形区域,该区域左上角坐标为left,top,宽为fig_width,高为fig_height*/
::MoveWindow(hFig,left,top,fig_width,fig_height,TRUE);
UpdateWindow(hFig);
return TRUE;
}

matlab相关代码主要是下面这一行:
figure('NumberTitle','off','menubar','none','toolbar','figure','name','Topo Image'); %设置matlab图像窗口的风格,该窗口名为Topo Image,无菜单栏,有工具栏(再matlab figure窗口嵌入到MFC界面后,希望能够保留工具栏,以便使用)

整体运行程序后出现这几个问题:
1.findwindow如果只调用一次,找不到matlab figure窗口的句柄,所以加了个循环,但这个循环次数到底多少才能找到窗口,只能靠试。这是findwindow的问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-29 20:24 , Processed in 0.030825 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表