亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ Invalidaterect()函數(shù)作用案例詳解

 更新時(shí)間:2021年08月24日 08:25:49   作者:HotIce0  
這篇文章主要介紹了C++ Invalidaterect()函數(shù)作用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

函數(shù)原型:

BOOLInvalidateRect(
HWND hWnd, // handle of window withchanged update region 窗口句柄。
CONST RECT *lpRect, // address ofrectangle coordinates rect結(jié)構(gòu)體的指針。
BOOL bErase // erase-background flag 是否要發(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一樣的??梢栽诤竺娼又褂肬pdateWindow()直接繞過(guò)程序消息隊(duì)列直接發(fā)送消息到WndProc函數(shù),來(lái)重繪窗口。

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

    case WM_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);
        return 0;
    case WM_LBUTTONDOWN:
        hdc = GetDC(hwnd);
        GetClientRect(hwnd, &rect);
        DrawText(hdc, TEXT("左鍵被單機(jī)咯!"), 13, &rect, DT_CENTER | DT_SINGLELINE);
        ReleaseDC(hwnd, hdc);
        return 0;

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

1,這里如果UpdateWindow(hwnd)被注釋掉的情況下,單機(jī)左鍵后,客戶區(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消息嗎?窗口不會(huì)重繪嗎?答案是不會(huì)。因?yàn)榇翱跊](méi)有無(wú)效的區(qū)域,所以WM_PAINT內(nèi)部的代碼也沒(méi)有執(zhí)行。(為什么沒(méi)有執(zhí)行,原因是UpdateWindow內(nèi)部檢測(cè)了是否有無(wú)效區(qū)域,如果沒(méi)有則不發(fā)送消息)。

到此這篇關(guān)于C++ Invalidaterect()函數(shù)作用案例詳解的文章就介紹到這了,更多相關(guān)C++ Invalidaterect()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 的三種訪問(wèn)權(quán)限與三種繼承方式

    C++ 的三種訪問(wèn)權(quán)限與三種繼承方式

    我們知道C++中的類,有三種訪問(wèn)權(quán)限(也稱作訪問(wèn)控制),它們分別是public、protected、private,C++中繼承的方式還有多種。下面通過(guò)本文給大家詳細(xì)介紹,對(duì)c++中的訪問(wèn)權(quán)限和繼承方式感興趣的朋友一起看看吧
    2016-11-11
  • 使用Qt的QChartView實(shí)現(xiàn)縮放和放大功能

    使用Qt的QChartView實(shí)現(xiàn)縮放和放大功能

    QCustomPlot是一個(gè)小型的Qt畫(huà)圖標(biāo)類,支持繪制靜態(tài)曲線、動(dòng)態(tài)曲線、多重坐標(biāo)曲線,柱狀圖,蠟燭圖,這篇文章主要介紹了Qt的QChartView實(shí)現(xiàn)縮放和放大功能,需要的朋友可以參考下
    2022-09-09
  • C/C++中的static關(guān)鍵字詳解

    C/C++中的static關(guān)鍵字詳解

    這篇文章主要為大家詳細(xì)介紹了 C/C++中的static關(guān)鍵字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C語(yǔ)言模擬實(shí)現(xiàn)字符串庫(kù)函數(shù)的示例講解

    C語(yǔ)言模擬實(shí)現(xiàn)字符串庫(kù)函數(shù)的示例講解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言模擬實(shí)現(xiàn)字符串庫(kù)函數(shù)的具體方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • C++使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制

    C++使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制

    這篇文章主要為大家詳細(xì)介紹了C++如何使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-11-11
  • C語(yǔ)言面試常見(jiàn)考點(diǎn)排序總結(jié)

    C語(yǔ)言面試常見(jiàn)考點(diǎn)排序總結(jié)

    深處開(kāi)發(fā)崗,其實(shí)排序也是繞不開(kāi)的環(huán)節(jié),其中冒泡排序,選擇排序,插入排序,歸并排序,快速排序,堆排序也是我在秋招以來(lái)頻繁問(wèn)到的技術(shù)點(diǎn),今天我們來(lái)重點(diǎn)聊聊排序
    2021-11-11
  • c++中map容器的使用詳解

    c++中map容器的使用詳解

    這篇文章主要介紹了c++中map容器的使用詳解,C++中map容器提供一個(gè)鍵值對(duì)容器,map與multimap差別僅僅在于multiple允許一個(gè)鍵對(duì)應(yīng)多個(gè)值,需要的朋友可以參考下
    2023-08-08
  • dev-c++創(chuàng)建lib(靜態(tài)鏈接庫(kù))文件的實(shí)現(xiàn)步驟

    dev-c++創(chuàng)建lib(靜態(tài)鏈接庫(kù))文件的實(shí)現(xiàn)步驟

    本文主要介紹了dev-c++創(chuàng)建lib(靜態(tài)鏈接庫(kù))文件的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存函數(shù)詳解

    C語(yǔ)言動(dòng)態(tài)內(nèi)存函數(shù)詳解

    這篇文章主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • ?C++模板template原理解析

    ?C++模板template原理解析

    這篇文章主要介紹了C++模板template原理,函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與類型無(wú)關(guān),在使用時(shí)被參數(shù)化,根據(jù)實(shí)參類型產(chǎn)生函數(shù)的特定類型版本
    2022-07-07

最新評(píng)論