最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年08月24日 08:25:49   作者:HotIce0  
這篇文章主要介紹了C++ Invalidaterect()函數(shù)作用案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(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消息從而擦除原來的背景
);

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

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

分析一下下面的程序會更加的清晰:

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

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

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

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

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

4.第三種情況,不就是使得區(qū)域無效,而且發(fā)送了WM_PAINT消息嗎。實際上,就算不發(fā)送WM_PAINT消息,系統(tǒng)也會派送WM_PAINT消息。因為無效了。我又想到UpdateWindow不也是給WndPro帶來了WM_PAINT消息嗎?窗口不會重繪嗎?答案是不會。因為窗口沒有無效的區(qū)域,所以WM_PAINT內(nèi)部的代碼也沒有執(zhí)行。(為什么沒有執(zhí)行,原因是UpdateWindow內(nèi)部檢測了是否有無效區(qū)域,如果沒有則不發(fā)送消息)。

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

相關文章

  • C++求解二叉樹的下一個結(jié)點問題

    C++求解二叉樹的下一個結(jié)點問題

    本文將通過C++求解以下問題:給定一個二叉樹其中的一個結(jié)點,請找出中序遍歷順序的下一個結(jié)點并且返回。文中示例代碼講解詳細,感興趣的可以了解一下
    2022-04-04
  • C++中opencv4.1.0環(huán)境配置的詳細過程

    C++中opencv4.1.0環(huán)境配置的詳細過程

    這篇文章主要介紹了C++中opencv4.1.0環(huán)境配置的詳細過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • C++類與對象的重點知識點詳細分析

    C++類與對象的重點知識點詳細分析

    類和對象是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲在內(nèi)存中—個可以擁有在某個范圍內(nèi)的可變存儲區(qū)域
    2023-02-02
  • C語言限制鏈表最大長度的方法實現(xiàn)

    C語言限制鏈表最大長度的方法實現(xiàn)

    本文主要介紹了C語言中限制鏈表的長度,通過在添加新元素時檢查鏈表的當前長度是否已經(jīng)達到預設的最大值來實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • C++?雙冒號::符號詳解

    C++?雙冒號::符號詳解

    本文主要介紹了C++?雙冒號::符號詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 用c語言實現(xiàn)和平精英的完整代碼

    用c語言實現(xiàn)和平精英的完整代碼

    這篇文章主要介紹了用c語言實現(xiàn)和平精英的完整代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C/C++實操True and false詳解

    C/C++實操True and false詳解

    這篇文章主要給大家介紹了關于Python中常用的數(shù)據(jù)類型bool(布爾)類型的兩個值:True和False的相關資料,通過示例代碼給大家進行了解惑,讓對這兩個值有所疑惑的朋友們能有起到一定的幫助,需要的朋友下面來一起看看吧。
    2021-09-09
  • FFmpeg實現(xiàn)變速播放的兩種方法總結(jié)

    FFmpeg實現(xiàn)變速播放的兩種方法總結(jié)

    這篇文章主要為大家詳細介紹了FFmpeg中實現(xiàn)變速播放的兩種方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-07-07
  • C語言圖文并茂講解分支語句用法

    C語言圖文并茂講解分支語句用法

    分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設計方法的關鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當?shù)姆种дZ句
    2022-04-04
  • C++手寫內(nèi)存池的案例詳解

    C++手寫內(nèi)存池的案例詳解

    這篇文章主要介紹了C++手寫內(nèi)存池的案例詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論

南乐县| 晴隆县| 石嘴山市| 揭西县| 沧源| 巢湖市| 叙永县| 环江| 定日县| 大同市| 那曲县| 宁波市| 寿光市| 泰兴市| 青冈县| 贞丰县| 郧西县| 汝州市| 美姑县| 嘉荫县| 温宿县| 鹰潭市| 广丰县| 柯坪县| 南乐县| 六枝特区| 洛南县| 南昌县| 武定县| 平定县| 凤台县| 呈贡县| 焉耆| 阳朔县| 延庆县| 常州市| 浦东新区| 泽州县| 吕梁市| 新乡市| 怀远县|