主题:[讨论]基于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的值都更新了,但是新的图就是不显示出来。
请问高手,我前面的那种方法对不对?如果是对的,闪烁能消除吗? 如果不对?是用后面的方法吗?或者说后面的方法还需要在哪里补充一下?
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的值都更新了,但是新的图就是不显示出来。
请问高手,我前面的那种方法对不对?如果是对的,闪烁能消除吗? 如果不对?是用后面的方法吗?或者说后面的方法还需要在哪里补充一下?