溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

InvalidateRect()與Invalidate()的用法

發(fā)布時(shí)間:2020-06-21 02:10:27 來源:網(wǎng)絡(luò) 閱讀:1994 作者:neitui 欄目:開發(fā)技術(shù)

  該函數(shù)向指定的窗體更新區(qū)域添加一個(gè)矩形,然后窗口客戶區(qū)域的這一部分將被重新繪制。
  BOOL InvalidateRect(
  HWND hWnd, // handle of window with changed update region
  CONST RECT *lpRect, // address of rectangle coordinates
  BOOL bErase // erase-background flag
  );
  參數(shù):
  hWnd:要更新的客戶區(qū)所在的窗體的句柄。如果為NULL,則系統(tǒng)將在函數(shù)返回前重新繪制所有的窗口, 然后發(fā)送 WM_ERASEBKGND 和 WM_PAINT 給窗口過程處理函數(shù)。
  lpRect:無效區(qū)域的矩形代表,它是一個(gè)結(jié)構(gòu)體指針,存放著矩形的大小。如果為NULL,全部的窗口客戶區(qū)域?qū)⒈辉黾拥礁聟^(qū)域中。
  bErase:指出無效矩形被標(biāo)記為有效后,是否重畫該區(qū)域,重畫時(shí)用預(yù)先定義好的畫刷。當(dāng)指定TRUE時(shí)需要重畫。
  返回值:
  函數(shù)成功則返回非零值,否則返回零值。
  說明:被標(biāo)記為無效矩形的區(qū)域直到WM_PAINT消息被處理完之后才會(huì)消失,或者使用ValidateRect(),ValidateRgn()函數(shù)來使之有效。當(dāng)應(yīng)用程序的消息隊(duì)列中為空時(shí),并且窗體要更新的區(qū)域非空時(shí),系統(tǒng)會(huì)發(fā)送一個(gè)WM_PAINT消息到窗體。
  這兩個(gè)都用于聲明客戶區(qū)無效,當(dāng)下一個(gè)WM_PAINT消息到來時(shí)發(fā)生重畫。其中InvalidateRect(hwnd, NULL, true);重畫時(shí)將擦除背景。
  InvalidateRect(hwnd, NULL, false);重畫時(shí)不擦除背景void Invalidate( BOOL bErase )執(zhí)行之后調(diào)用函數(shù)的次序?yàn)椋?br />  ...OnPaint()->OnPrepareDC()->OnDraw()
  所以只是刷新在OnPaint()和OnDraw()www.neitui.me/zx/函數(shù)中的繪圖語句。其它地方?jīng)]有影響。
  Invalidate()標(biāo)記一個(gè)需要重繪的無效區(qū)域,并不意味著調(diào)用該函數(shù)后就立刻進(jìn)行重繪。類似于PostMessage(WM_PAINT),需要處理到WM_PAINT消息時(shí)才真正重繪。如果您Invalidate()之后還有其他的語句正在執(zhí)行,程序沒有機(jī)會(huì)去處理WM_PAINT消息,只有當(dāng)函數(shù)執(zhí)行完畢后,消息處理才得以進(jìn)行。
  Invalidate()只是放一個(gè)WM_PAINT消息在隊(duì)列里,不做別的,所以只有當(dāng)當(dāng)前函數(shù)返回后,進(jìn)入消息循環(huán),取出WM_PAINT,才執(zhí)行OnPaint(),所以不管Invalidate放哪里,都是最后執(zhí)行的。
  InvalidateRect(hWnd,&rect,TRUE);向hWnd窗體發(fā)出WM_PAINT的消息,強(qiáng)制客戶區(qū)域重繪制。rect是你指定要刷新的區(qū)域,內(nèi)推網(wǎng)(www.neitui.me ),專注于做互聯(lián)網(wǎng)招聘行業(yè)內(nèi)部推薦、打造最專業(yè)的互聯(lián)網(wǎng)招聘內(nèi)部推薦直招平臺(tái)。此區(qū)域外的客戶區(qū)域不被重繪,這樣防止客戶區(qū)域的一個(gè)局部的改動(dòng),而導(dǎo)致整個(gè)客戶區(qū)域重繪而導(dǎo)致閃爍,如果最后的參數(shù)為TRUE,則還向窗體發(fā)送WM_ERASEBKGND消息,在客戶區(qū)域重繪之前先重繪背景。
  UpdateWindow只向窗體發(fā)送WM_PAINT消息,在發(fā)送之前判斷GetUpdateRect(hWnd,NULL,TRUE)看有無可繪制的客戶區(qū)域,如果沒有,則不發(fā)送WM_PAINT。
  如果希望立即刷新無效區(qū)域,可以在調(diào)用InvalidateRect之后調(diào)用UpdateWindow,如果客戶區(qū)的任一部分無效,則UpdateWindow將導(dǎo)致Windows用WM_PAINT消息調(diào)用窗口過程(如果整個(gè)客戶區(qū)有效,則不調(diào)用窗口過程)。這一WM_PAINT消息不進(jìn)入消息隊(duì)列,直接由WINDOWS調(diào)用窗口過程。窗口過程完成刷新以后立刻退出,WINDOWS將控制返回給程序中UpdateWindow調(diào)用之后的語句。
  UpdateData()這個(gè)函數(shù)不是刷新界面用的。
  UpdateData();參數(shù)為FALSE時(shí),將界面上控件綁定的變量的數(shù)據(jù)導(dǎo)到控件內(nèi),參數(shù)為TRUE時(shí),導(dǎo)入方向則相反。
     

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI