Invalidate 函式用法

2021-05-23 23:53:07 字數 1216 閱讀 3555

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();引數為false時,將介面上控制項繫結的變數的資料導到控制項內,引數為true時,匯入方向則相反。

invalidate函式使用

invalidate函式的總結 invalidaterect只是增加重繪區域,在下次wm paint的時候才生效 invalidaterect函式中的引數true表示系統會在你畫之前用背景色將所選區域覆蓋一次,預設背景色為白色,可以通過設定brush來改變背景色。invalidate 之後 mfc的...

剪裁區域和Invalidate函式

剪裁區域 在onpaint函式中有乙個引數是paineventargs型別,這個類中儲存了乙個矩形,這個矩形就是所謂的剪裁區域。剪裁區域就是視窗上的無效區域,也就是要重繪的區域。這個區域的大小是由wm paint訊息決定的。而能產生這個訊息的機制有很多,比如 當窗體部分被其他窗體覆蓋時,這時就會產生...

函式的用法 CELL函式高階用法,

資料多時看的眼花繚亂,使用聚光燈功能突出顯示當前的行和列,在檢視資料時非常方便,wps是自帶該功能的。選中要設定的資料區域,在 開始 選項卡下點 條件格式 選擇 新建規則 在彈出的 新建格式規則 視窗中選擇 使用公式確定要設定格式的單元格 在 為符合此公式的值設定格式 下輸入公式 or cell r...