调用InvalidateRect函数就会触发OnPaint函数,但是OnPaint函数中没有RECT或者CRect类型的参数啊!它是如何知道画哪一块的?

解决方案 »

  1.   

    OnPaint 在空闲的时间绘制窗口
    在消息队列里,只有一个WM_PAINT消息,rect是累加的
    如果你想让窗口立即绘制
    在InvalidateRect之后
    调用SendMessage(WM_PAINT)
      

  2.   

    OnPaint好象是一直执行,而且他处理的是这个界面。
      

  3.   

    系统知道啊、,他就更新InvalidateRect中指定的rect区域
      

  4.   

    如果OnPaint函数中什么都没有处理,将在::DefWindowsProc中处理,其中有默认的RECT。
      

  5.   

    那在我自己重载的OnPaint函数中,能有方法知道我要重绘的区域吗?
      

  6.   

    调用:
    BOOL InvalidateRect(
      HWND hWnd,  // handle of window with changed update region
      CONST RECT *lpRect,
                  // address of rectangle coordinates
      BOOL bErase // erase-background flag
    );
      

  7.   

    BOOL GetUpdateRect( LPRECT lpRect, BOOL bErase = FALSE );
      

  8.   

    Invalidate是全部刷新如果你要用InvalidateRect,你要给它一个crect的区域
      

  9.   

    调用::BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);之后
    把需要重绘的无效区域放在PAINTSTRUCT结构的rcPaint成员中;
    typedef struct tagPAINTSTRUCT {
        HDC         hdc;
        BOOL        fErase;
        RECT        rcPaint;
        BOOL        fRestore;
        BOOL        fIncUpdate;
        BYTE        rgbReserved[32];
    } PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;