摘要://注意SetWindowLong()和SetWindowPos()先后顺序,详见MSDN::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);CRectPlotRec;CWnd*PlotArea=GetDlgItem(IDC_STATIC_FIGURE);
//注意SetWindowLong()和SetWindowPos()先后顺序,详见MSDN
::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);CRect PlotRec;
CWnd *PlotArea = GetDlgItem(IDC_STATIC_FIGURE); //设置图像显示区域
PlotArea->GetWindowRect(&PlotRec);
long Width = PlotRec.right - PlotRec.left;
long Height = PlotRec.bottom - PlotRec.top;
::SetParent(hFig,PlotArea->GetSafeHwnd());
//设置图像的父窗口
::SetWindowPos(hFig,NULL,0,0,Width,Height,SWP_NOZORDER|SWP_NOACTIVATE);
3.2基于Bitmap类的图像嵌入
通过Bitmap类将Matlab生成的。bmp文件加载到VC工程中,使用Bitmap类中的成员函数对图像进行处理。由于相关函数可以通过帮助手册获取,所以此处不再给出相应代码,运行结果如图2所示。该方法避免了方法一生成图像时的闪烁现象,但是BMP图像显示效果较差而且无法使用Matlab提供的工具菜单,这是其不足之处。
使用COM组件进行混合编程时,往往习惯于在VC平台下思考所遇到的问题,但是这样不仅使得问题可能变得复杂化,或得不到妥善解决,而且也违背了“混合”的初衷。二维数组参数处理就是一个很好的例证。其次,充分利用Matlab特性可以使得程序具备良好的扩展性和稳定性,对Excel文件读取方式进行的扩展,明显使软件更加人性化。对于图像嵌入问题,虽然文中提出的两种嵌入方式可以满足基本需求,但是仍然存在一些瑕疵,还需要进一步研究。
[1] [2] [3] [4] [5]