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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值