Invalidate();
和直接调用
CDC *pDC=GetDC();
OnDraw(pDC);
有什么区别?(画都是在OnDraw里面画,未在其他地方画)

解决方案 »

  1.   

    使用Invalidate()是正规的做法,是不是要调用OnDraw由系统决定,因为窗口可以隐藏,可以最小化的。调用OnDraw(pDC)就是你自己控制了,不是正式的做法。
      

  2.   

    Invalidate()应该是有条件的触发WM——PAINT消息,从而在消息响应函数中OnDraw执行。是间接的调用OnDraw,比调用OnDraw(pDC)就是你自己控制多了一些过程
      

  3.   

    呵呵,其实我是想知道他们的调用及时性上的区别,我调用了onDraw感觉它并没有帮我刷新界面
    而调用invalidate呢又刷新的太晚了。
      

  4.   

    InvalidatedRect 
    使一个矩形无效,需要重绘该矩形,在该矩形做一个重绘的标记,当下一次WM_PAINT发出的时候,该矩形被重绘.
    使显示矩形区无效,WM_PAINT会对无效的区域重画
    函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色。  UpdateWindow
    强制发出一个WM_PAINT消息 
    会发送一条WM_PAINT,但不进入消息队列,呼叫立即更新窗口  
    只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT   如果希望立即刷新无效区域,可以在调用InvalidateRect之后调用UpdateWindow,如果客户区的任一部分无效,
    则UpdateWindow将导致Windows用WM_PAINT消息调用窗口过程(如果整个客户区有效,则不调用窗口过程)。
    这一WM_PAINT消息不进入消息队列,直接由WINDOWS调用窗口过程。窗口过程完成刷新以后立刻退出,
    WINDOWS将控制返回给程序中UpdateWindow调用之后的语句。