C++ Invalidaterect()函數(shù)作用案例詳解_第1頁(yè)
C++ Invalidaterect()函數(shù)作用案例詳解_第2頁(yè)
C++ Invalidaterect()函數(shù)作用案例詳解_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C++Invalidaterect()函數(shù)作用案例詳解HWNDhWnd,//handleofwindowwithchangedupdateregion窗口句柄。

CONSTRECT*lpRect,//addressofrectanglecoordinatesrect結(jié)構(gòu)體的指針。

BOOLbErase//erase-backgroundflag是否要發(fā)送WM_ERASEBKGND消息從而擦除原來(lái)的背景

);

這個(gè)函數(shù)的作用是,使得Client的一個(gè)矩形區(qū)域變得無(wú)效,rect結(jié)構(gòu)體可以自己編輯,也可以使用GetClientRcet()來(lái)填充(這里的矩形大小Client的大小),最主要的是第三個(gè)參數(shù),第三個(gè)參數(shù)決定了是否發(fā)送WM_ERASEBKGND消息,從而決定了是否擦除Client原有的圖形。當(dāng)然InvalidateRect發(fā)送WM_PAINT的形式是一種POST形式(即發(fā)送到程序消息隊(duì)列),而不是像SendMessage一樣直接讓操作系統(tǒng)帶著消息,調(diào)用WndProc。

當(dāng)然如果想像SendMessage一樣的。可以在后面接著使用UpdateWindow()直接繞過(guò)程序消息隊(duì)列直接發(fā)送消息到WndProc函數(shù),來(lái)重繪窗口。

分析一下下面的程序會(huì)更加的清晰:

caseWM_RBUTTONDOWN:

hdc=GetDC(hwnd);

GetClientRect(hwnd,rect);

DrawText(hdc,TEXT("右鍵鍵被單機(jī)咯!"),13,rect,DT_VCENTER|DT_SINGLELINE);

ReleaseDC(hwnd,hdc);

InvalidateRect(hwnd,NULL,true);

//UpdateWindow(hwnd);

Sleep(1000);

return0;

caseWM_LBUTTONDOWN:

hdc=GetDC(hwnd);

GetClientRect(hwnd,rect);

DrawText(hdc,TEXT("左鍵被單機(jī)咯!"),13,rect,DT_CENTER|DT_SINGLELINE);

ReleaseDC(hwnd,hdc);

return0;

這里為了能看到效果我使用了Sleep。在實(shí)際編程處理消息,不是在多線(xiàn)程時(shí),這樣的使用是十分愚蠢的,因?yàn)?,消息循環(huán)的機(jī)制,如果你不快速的處理每一條消息。用戶(hù)的體驗(yàn)將會(huì)受到很大的影響。比如,,無(wú)法操作,,這是最尷尬的。

1,這里如果UpdateWindow(hwnd)被注釋掉的情況下,單機(jī)左鍵后,客戶(hù)區(qū)屏幕打印出左鍵被單機(jī)咯,單機(jī)右鍵后打印出右鍵被單機(jī)咯。隨后,調(diào)用了InvalidateRect()發(fā)送了WM_PAINT和WM_ERASEBKGND消息到消息隊(duì)列,因?yàn)镮nvalidate第三個(gè)參數(shù)是true所以背景被重畫(huà),并且使rect的矩形范圍失效。從而延遲1000ms后,處理WM_PAINT消息后,窗口上的左鍵…右鍵…..的字樣都被清除。

2,如果UpdateWindow(hwnd)沒(méi)被注釋掉。左鍵單機(jī),右鍵單機(jī),出現(xiàn)兩條提示后,立即都消失(一般情況看不到右鍵點(diǎn)擊的提示,而是直接擦除左鍵點(diǎn)擊的提示的效果),為什么呢,因?yàn)閁pdateWindow的作用,直接繞過(guò)隊(duì)列,帶到WndProc中去。所以直接重繪了。

3.如果InvalidateRect里面是false則結(jié)果將是沒(méi)有任何效果。難道真的是沒(méi)有效果嗎。當(dāng)然不是,實(shí)際上是有效果的。因?yàn)?,這里InvalidateRect還是使得rect的區(qū)域失效了,只是不會(huì)擦除背景也就是原來(lái)打印在屏幕上的提示都不會(huì)被清除。而且還是發(fā)送了WM_PAINT消息,所以WM_PINT消息內(nèi)的處理,會(huì)執(zhí)行一次。

4.第三種情況,不就是使得區(qū)域無(wú)效,而且發(fā)送了WM_PAINT消息嗎。實(shí)際上,就算不發(fā)送WM_PAINT消息,系統(tǒng)也會(huì)派送WM_PAINT消息。因?yàn)闊o(wú)效了。我又想到UpdateWindow不也是給WndPro帶來(lái)了WM_PAINT消息嗎?窗口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論