我知道,在一个对话框中绘图可以在OnPaint()中进行,但是现在我需要在程序运行过程中不断的更新绘图。
例如,我新建了个绘图函数void CMyDlg::pain()
{
   CDC *p=GetDC();
   p->textout(10,10,"123");
}我把pain()放在OnInitDialog()函数,结果对话框中没有:“123”,好像函数没有执行。
然后我改成这样
void CMyDlg::pain()
{
   CDC *p=GetDC();
   p->textout(10,10,"123");
   Onpaint();  //增加了这一行,本想相应的,但是程序终止了
}
我猜想可能与消息有关,所以请教大家,怎样响应pain()函数,让它在别的函数了可以调用执行。
其次,如果我画了一个矩形,怎样删除这个矩形呢?谢谢大家了

解决方案 »

  1.   

    OnInitDialog()中调用pain(),能够正常执行,可惜又被系统“清理”了
    如果你真的想在对话框启动完毕调用的话,可以重载PreTranslateMessage
    BOOL CTstDisableDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    static BOOL boFirstDrawn=FALSE;
    if (!boFirstDrawn)
    {
    Paint();
    boFirstDrawn = TRUE;
    }

    return CDialog::PreTranslateMessage(pMsg);
    }WM_PAINT是最好的绘图时机,你却不用另外,几乎所有OnXXXXX开头的消息处理函数,你是不能自己调用的,原因就是在于MFC在调用之间都会为消息处理函数“作准备”,你没有为这个函数“作准备”,只所以为什么会退出,则看情况而定了。
      

  2.   

    settimer(500)
    然后在ontimer中paint()...
    这样就会一直刷新了。
      

  3.   

    最好放在Onpaint函数里实现自己的绘图功能
    Onpaint一般在窗体大小改变等因素下会绘图
    如果你想实时绘图,要么使用定时器
    不过我建议里使用线程消息或者是观察者模式进行绘图,这样效率会高一点