欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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結構體的指針。
BOOL bErase // erase-background flag 是否要發(fā)送WM_ERASEBKGND消息從而擦除原來的背景
);

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

當然如果想像SendMessage一樣的??梢栽诤竺娼又褂肬pdateWindow()直接繞過程序消息隊列直接發(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則結果將是沒有任何效果。難道真的是沒有效果嗎。當然不是,實際上是有效果的。因為,這里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++ 的三種訪問權限與三種繼承方式

    C++ 的三種訪問權限與三種繼承方式

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

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

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

    C/C++中的static關鍵字詳解

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

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

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

    C++使用標準庫實現(xiàn)事件和委托以及信號和槽機制

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

    C語言面試常見考點排序總結

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

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

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

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

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

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

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

    ?C++模板template原理解析

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

最新評論