UpdateWindow直接发送WM_PAINT消息到窗口。
而Invalidate发送WM_PAINT消息到消息队列,当下一次OnPaint()的时候才刷新窗口。
相比较,UpdateWindow刷新速度要快点。
Invalidate()是用来发送WM_PAINT的,
UpdateWindow()也是用来发送WM_PAINT的,只不过UnpdateWindow()不经过消息队列,通过SendMessage()发送的,但有的程序联在一起用,还写在绘图程序之前。比如:
void CAboutDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CWnd* pWnd=GetDlgItem(IDC_VERSION);
CDC* pControlDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH);
pControlDC->Rectangle(0,0,10,13);
pWnd->ReleaseDC(pControlDC);
// Do not call CDialog::OnPaint() for painting messages
}
UpdateWindow 可以说是立即执行刷新.Invalidate象enoloo(行者无疆) 说的那样在队列中,要轮到的时候才执行.
pWnd->Invalidate(); // 给窗体做刷新标志, 并未实现刷新
pWnd->UpdateWindow(); // 触发刷新, 发送WM_PAINT消息