MFC中InvalidateRect()与Invalidate()

InvalidateRect

声明

BOOL InvalidateRect(
  HWND hWnd,                   // 窗口句柄
  CONST RECT* lpRect,           // 矩形区域
  BOOL bErase = true            //是否擦除背景
);

  仅对矩形区域(lpRect所指区域)进行重绘;
  bErase指重绘前(WM_PAINT)是否用背景色(默认为白色)对无效区域进行擦除(WM_ERASEBKGND)。默认为true即进行擦除,在这种情况下可能出现闪烁的情况(如北背景为一张图片)。故此时选用false较好,不会闪烁。

Invalidate

声明

void Invalidate( BOOL bErase )

  同样,bErase 决定了是否要在WM_PAINT消息前发送WM_ERASEBKGND。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。

UpdateWindow

作用:立即重绘窗口

  InvalidateRect与Invalidate都是通过发送WM_PAINT消息进入消息队列中进行排队,当消息队列中有消息时WM_PAINT并不会立即执行,需要等待前面的消息执行完成才执行重绘操作。故想要立即重回窗口就需要调用UpdateWindow函数,该函数可以使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。

posted on 2016-11-28 14:39  silentteen  阅读(381)  评论(0编辑  收藏  举报