找回密码
 注册
Simdroid-非首页
楼主: shunfly

写了个MATLAB VC绘图类

[复制链接]
 楼主| 发表于 2007-5-22 14:18:29 | 显示全部楼层 来自 湖北武汉
我试验过了
模拟UP也是可以的
只是要注意模拟的UP别又被我过滤掉就行
我一开始之所以会出现有几个跳点的问题
是类似于这样的函数

  1. function VCGui
  2. axes;
  3. set(gcf,'WindowButtonDownFcn',@Action,'DoubleBuffer','on');
  4. function Action(hObject,eventdata,handles)
  5.         hold on;
  6.         p=mean(get(gca,'currentpoint'));
  7.         plot(p(1),p(2),'o','MarkerSize',8,'MarkerFaceColor','r')
复制代码

坐标系刚刚建立,并没有画图
当一个空白的坐标存在时
MATLAB会根据前两个点,确定直线,也就是大概确定了xlim,ylim
而其实点的坐标值还是对的
回复 不支持

使用道具 举报

 楼主| 发表于 2007-12-4 20:40:56 | 显示全部楼层 来自 湖北武汉
Simdroid开发平台
基于MATLAB6.5,对7.X有启发。希望把什么寻找窗体,嵌入VC的工作扔掉吧!
至于其他功能,参照本帖,酌情加入
单文档MFC EXE
View类h,Include,定义
public:
        CMatGraph m_MatAxes ;
View类cpp,OnInitialUpdate()中,创建
        m_MatAxes.Create(this,0,0,1,1)          ;
View类cpp,OnSize(UINT nType, int cx, int cy)中,
        m_MatAxes.OnSize();

类头文件MatGraph.hpp
  1. #include "matlab.hpp"
  2. #include "libmwsglm.hpp"
  3. #include "libmatlb.hpp"
  4. #include "mwservices.h"
  5. #include "libmatlbm.hpp"
  6. class CMatGraph
  7. {
  8.     public:
  9.                 CMatGraph()                                  ;
  10.                 virtual ~CMatGraph()                         ;
  11.         private:
  12.                 mwArray m_hFigure                            ;
  13.                 CWnd   *m_wParentWnd                         ;
  14.                 HWND    m_HwndFig                            ;
  15.                 bool    m_bIniStart                          ;
  16.                 double  m_dPosition[4]                       ;
  17.     public:
  18.                 void Create(CWnd  *mHPar,
  19.                                 double dPox   ,double dPoy,
  20.                                         double dWdith ,double dHeight   );
  21.                 void OnSize()                                ;
  22. };
复制代码

类实现文件MatGraph.cpp
  1. #include "stdafx.h"
  2. #include "MatGraph.hpp"
  3. CMatGraph::CMatGraph()
  4. {
  5.         libmmfileInitialize()                            ;
  6.     libmwsglmInitialize()                            ;
  7.     int argc                                         ;
  8.     argc=0                                           ;
  9.     const char *p = NULL                             ;
  10.     mlfHGInitialize(&argc,&p)                        ;
  11.         m_hFigure=Nfigure(1,"name"         , "Figure"  ,
  12.                                 "numbertitle"  , "off"     ,
  13.                                             "color"        , "w"       ,
  14.                                             "visible"      , "off"     ) ;
  15.     m_bIniStart = false                               ;

  16. }
  17. CMatGraph::~CMatGraph()
  18. {
  19.         if (tobool(ishandle(m_hFigure)))
  20.         {
  21.            delete_func(mwVarargin(m_hFigure));
  22.         }
  23.         mlfHGWaitForFiguresToDie()                       ;
  24.     mlfHGTerminate()                                 ;
  25.     libmmfileTerminate()                             ;
  26.     libmwsglmTerminate()                             ;
  27. }
  28. void CMatGraph::Create(CWnd  *mHPar,
  29.                                    double dPox   ,double dPoy,
  30.                                            double dWdith ,double dHeight )
  31. {
  32.     HWND hFig   = ::FindWindow(NULL,"Figure")        ;
  33.         long lStyle = ::GetWindowLong(hFig,GWL_STYLE)    ;
  34.     ::SetWindowLong(hFig,GWL_STYLE,
  35.                             lStyle &(~WS_CAPTION) & (~WS_THICKFRAME));
  36.         ::SetParent(hFig,mHPar->GetSafeHwnd())           ;
  37.         Vset(m_hFigure,"visible"  ,"on")                 ;
  38.         Vaxes("parent",m_hFigure);        
  39.         m_bIniStart = true                               ;
  40.         m_wParentWnd = mHPar                             ;
  41.         m_HwndFig    = hFig                              ;
  42.         m_dPosition[0] = dPox                            ;
  43.     m_dPosition[1] = dPoy                            ;
  44.         m_dPosition[2] = dWdith                          ;
  45.         m_dPosition[3] = dHeight                         ;
  46.         OnSize()                                         ;
  47.         drawnow(mwArray::DIN)                            ;
  48. }
  49. void CMatGraph::OnSize()
  50. {
  51.     if(m_bIniStart)        
  52.         {
  53.          RECT PlotRec                                ;
  54.          m_wParentWnd->GetWindowRect(&PlotRec)       ;
  55.              long Width = PlotRec.right - PlotRec.left   ;
  56.          long Height = PlotRec.bottom - PlotRec.top  ;
  57.                  mwArray Position = ones(1,4)                ;
  58.              Position(1)      = 0                        ;
  59.              Position(2)      = 0                        ;
  60.              Position(3)      = Width*m_dPosition[2]     ;
  61.              Position(4)      = Height*m_dPosition[3]    ;
  62.              Vset(m_hFigure,"visible"  ,"on",
  63.                                 "units"    ,"pixels",
  64.                                         "Position" ,Position)        ;
  65.              ::SetWindowPos(m_HwndFig, NULL,
  66.                                     int(Width*m_dPosition[0]),
  67.                                                 int(Height*m_dPosition[1]),
  68.                                     int(Width*m_dPosition[2]),
  69.                                                 int(Height*m_dPosition[3]),
  70.                                                 SWP_NOZORDER | SWP_NOACTIVATE);
  71.         }
  72. }
复制代码

[ 本帖最后由 shunfly 于 2007-12-4 20:43 编辑 ]
回复 不支持

使用道具 举报

 楼主| 发表于 2008-5-8 18:36:51 | 显示全部楼层 来自 湖北武汉
这门古老的没有技术含量的手工技术活
答辩完后,准备推出俺以前写的绘图动态库
有这方面需求的可以说说建议意见要求
回复 不支持

使用道具 举报

发表于 2008-5-8 23:46:15 | 显示全部楼层 来自 北京
牛人啊,学习

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-10-21 15:14:04 | 显示全部楼层 来自 陕西西安
楼主好强啊。混编matcom引擎,dll也试过了。自己都没有想到可以写一个类。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-21 15:53:01 | 显示全部楼层 来自 广西桂林
重看此贴,和TAOHE,SCIE的讨论真是过瘾来劲。
回复 不支持

使用道具 举报

发表于 2010-5-20 14:03:54 | 显示全部楼层 来自 湖北武汉
谢谢了,总感觉在vc中调用matlab不方便,感谢楼主的贡献
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-20 15:01:53 | 显示全部楼层 来自 湖北武汉
眼界放短了,会拘泥于VC和MATLAB关系中,你总觉得MATLAB庞大,VC调用MATLAB相当负责
眼界放开点,你会发现,在VC调用MATLAB过程中,MATLAB无非提供了一个内容一个封口而已。与我们平时自己建立VC DLL留个Hpp接口无异。
谢谢了,总感觉在vc中调用matlab不方便,感谢楼主的贡献
iryou123 发表于 2010-5-20 14:03

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-23 21:36:47 | 显示全部楼层 来自 湖北武汉
若干年,突然又遇到个问题,想起了这个子类化的方法了,突然想起SCIE和TAOHE两个大哥了,今安在?
回复 不支持

使用道具 举报

发表于 2013-11-24 18:26:33 | 显示全部楼层 来自 英国
shunfly别来无恙,谢谢挂念。

为了避免此贴太水,加一句:查找Windows窗口,可以考虑使用EnumWindows,我觉得EnumWindows比FindWindow**好用。

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 16:06 , Processed in 0.042105 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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