UpdateWindow()和Invalidate()有什么区别?

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消息

你可能感兴趣的:(Windows,编程)