对,WM_PAINT中的就不会没有了!

解决方案 »

  1.   

    我重载了WM_PAINT消息,窗口可以重绘了,但是当另外一个窗口移到上面再拿开后,上面的文字就没有了。请问这样该如何恢复以前的信息?
      

  2.   

    在WM_PAINT消息里写字,
    并且,InvalidateRect()你是在什么地方调用的?
      

  3.   

    InvalidateRect()在一个timer里面调用,timer用callback函数实现。
      

  4.   

    你可能不是在响应WM_PAINT消息的OnDraw函数中写的字吧
    是不是在别的地方写的字比如调用GetDC什么的,
    然后自已在程序中InvalidateRect()的?
    你试试改变一下窗口的大小,看看字还在不在,如果不在,
    我想你一定不是在WM_PAINT的消息响应函数中调用TextOut的
    是不是? 如果是你可以在WM_PAINT的消息响应函数中写同样的代码就成了.
      

  5.   

    你把所有的GDI输出都写在OnDraw里~~
      

  6.   

    问题就在于InvalidateRect中rect的指针我赋的值是null
    于是对整个窗口的内容更新。
      

  7.   

    呵呵。你的窗口是什么?如果是对话框,在OnPaint()里显示所有内容,注意:要把显示的内容先存储到类的成员变量里。比如 
    CString s;(它必须是类的成员变量,不能是函数内部定义的变量!)
    ////
    s.Format("%d",100);
    pDC->TextOut(0,0,s);
    /////
    如果是View的话,在OnDraw()里写显示的内容。
      

  8.   

    你要把所有跟显示在窗口内的文字/图形相关的数据都保存住,每次收到WM_PAINT的时候都要重新画一次!
      

  9.   

    处理WM_PAINT    消息即可.