回 帖 发 新 帖 刷新版面

主题:[讨论]基于matcom的matlab与VC.net混编出现闪烁的问题

我用matcom将.m文件(画图)转换成.cpp和.h加入到我在VC.net里面建立的对话框应用程序,然后在对话框中加入一文本编辑框,一combo box,一按钮,响应按钮的单击事件,我在这个函数中加入以下代码:
    UpdateData(true);
    ::DestroyWindow(*p);
    initM(MATCOM_VERSION);
    p->Create(_T("STATIC"), "", WS_CHILD | WS_VISIBLE | WS_BORDER,CRect(0, 0, 400, 400), this, 1234);
    Mm plothandle=winaxes(p->m_hWnd);
    ITA=m_ITA;
    ISR=m_ISR;
    ksh_start(ITA,ISR,1,1,1,1,1,1,1,1,0,60,8,3000,-90,0.1,400,1500);
    exitM();
对程序的解释:ksh_start就是.m文件里的函数,本来有很多参数,现在我只是试验,拿出两个参数用文本编辑框传值看行不行,m_ITA、m_ISR分别是文本编辑框、combo box对应的变量。p=new CWnd;
在相应的位置加入#include之类的。

下图是我的对话框界面,运行以后左边显示画出来的图形。然后在我改变文本编辑框或者combo box的值,再次点击按钮,新的图形出现,但是点击按钮时,这个图形区域闪的很厉害。这个原因我感觉应该是将一个窗口Destroy了,然后Create了出现的闪烁。说到这里很多朋友会说为什么不直接覆盖呢?也就是说下面这段代码(界面里面先建立一个静态文本框或者图片控制框,程序里获得此句柄,然后在调用函数在里面绘图):

    UpdateData(true);
    initM(MATCOM_VERSION);
    p=(CWnd*)GetDlgItem(IDC_PIC);
    Mm plothandle=winaxes(p->m_hWnd);
    ITA=m_ITA;
    ISR=m_ISR;
    ksh_start(ITA,ISR,1,1,1,1,1,1,1,1,0,60,8,3000,-90,0.1,400,1500);
    exitM();
这段代码理论上应该是可以实现“改变文本编辑框或combo box的值后,单击按钮,图形应该会更新”的功能,但是我试过了,实现不了,ITA和ISR的值都更新了,但是新的图就是不显示出来。

请问高手,我前面的那种方法对不对?如果是对的,闪烁能消除吗? 如果不对?是用后面的方法吗?或者说后面的方法还需要在哪里补充一下?

回复列表 (共4个回复)

沙发

没有朋友帮忙解答一下吗?

板凳

UpdateData(true);
请问这个是更新什么的?

你图像闪烁有没有考虑,在重新绘图时,要把前面的图清理才能重新绘图

    if (ExistFigure==true) 
    {
         clf(1);
        ExistFigure=false;
    }     //对图像进行清理,准备重新绘图
............................
在每次绘图后面要让ExistFigure=true;

用下这个试试

3 楼


UpdateData(true);是从文本编辑框里面传值过来

4 楼


我试试你说的,谢谢阿

我来回复

您尚未登录,请登录后再回复。点此登录或注册