c++中 invalidate用法

來源:互聯網
上載者:User
 

void Invalidate( BOOL bErase = TRUE );
函數的作用是使整個視窗客戶區無效。視窗的客戶區無效意味著需要重繪,例如,如果一個被其它視窗遮住的視窗變成了前台視窗,那麼原來被遮住的部分就是無效的,需要重繪。這時Windows會在應用程式的訊息佇列中放置WM_PAINT訊息。MFC為視窗類別提供了WM_PAINT的訊息處理函數OnPaint,OnPaint負責重繪視窗。視圖類有一些例外,在視圖類的OnPaint函數中調用了OnDraw函數,實際的重繪工作由OnDraw來完成。參數bErase為TRUE時,重繪地區內的背景將被擦除,否則,背景將保持不變。

        和 UpdateWindow( )區別在於:UpdateWindow( )的作用是使視窗立即重繪。調用Invalidate函數後視窗不會立即重繪,這是由於WM_PAINT訊息的優先順序很低,它需要等訊息佇列中的其它訊息發送完後才能被處理。調用UpdateWindow函數可使WM_PAINT被直接發送到目標視窗,從而導致視窗立即重繪

 

Invalidate(false)不擦除背景,直接畫
Invalidate(true)擦除背景

Invalidate()函數用法

Invalidate(false)不擦除背景,直接畫
Invalidate(true)擦除背景

InvalidateRect只是增加重繪地區,在下次WM_PAINT的時候才生效

InvalidateRect函數中的參數TRUE表示系統會在你畫之前用背景色將所選地區覆蓋一次,預設背景色為白色,可以通過設定BRUSH來改變背景色。

Invalidate()之後:(MFC的,順便了)
OnPaint()->OnPrepareDC()->OnDraw()
所以只是重新整理在OnPaint()和OnDraw()函數中的繪圖語句。其它地方沒有影響。

Invalidate標記一個需要重繪的無效地區,並不意味著調用該函數後就立刻進行重繪。類似於PostMessage(WM_PAINT),需要處理到WM_PAINT訊息時才真正重繪。以為您Invalidate之後還有其他的語句正在執行,程式沒有機會去處理WM_PAINT訊息,但當函數執行完畢後,訊息處理才得以進行。

Invalidate只是放一個WM_PAINT訊息在隊列裡,不做別的,所以只有噹噹前函數返回後,進入訊息迴圈,取出WM_PAINT,才執行PAINT,所以不管Invalidate放哪裡,都是最後的。

InvalidateRect(hWnd,&rect,TRUE);向hWnd表單發出WM_PAINT的訊息,強制用戶端區域重繪製,
rect是你指定要重新整理的地區,此地區外的用戶端區域不被重繪,這樣防止用戶端區域的一個局部的改動,而導致整個用戶端區域重繪而導致閃爍,如果最後的參數為TRUE,則還向表單發送WM_ERASEBKGND訊息,使背景重繪,當然在用戶端區域重繪之前。
UpdateWindow()只向表單發送WM_PAINT訊息,在發送之前判斷GetUpdateRect(hWnd,NULL,TRUE)看有無可繪製的用戶端區域,如果沒有,則不發送WM_PAINT

如果希望立即重新整理無效地區,可以在調用InvalidateRect之後調用UpdateWindow,如果客戶區的任一部分無效,則UpdateWindow將導致Windows用WM_PAINT訊息調用視窗過程(如果整個客戶區有效,則不調用視窗過程)。這一WM_PAINT訊息不進入訊息佇列,直接由WINDOWS調用視窗過程。視窗過程完成重新整理以後立刻退出,WINDOWS將控制返回給程式中UpdateWindow調用之後的語句。

UpdateData()順便說下,這個函數不是重新整理介面用的。
UpdateData();參數為true時,將介面上控制項綁定的變數的資料導到控制項內,參數為false時,匯入方向則相反

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.