• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Welcome to ErranLi's Blog!

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 177258
            • 排名 - 151

            最新評論

            閱讀排行榜

            Invalidate和UpdateWindow的區別
            Invalidate在消息隊列中加入一條WM_PAINT消息,其無效區為整個客戶區。
            UpdateWindow直接發送一個WM_PAINT消息,其無效區范圍就是消息隊列中WM_PAINT消息(最多只有一條)的無效區。
            效果很明顯,當調用Invalidate之后,屏幕不一定馬上更新,因為WM_PAINT消息不一定在隊列頭部,而調用UpdateWindow會使WM_PAINT消息馬上執行的,繞過了消息隊列。
            如果調用Invalidate之后想馬上更新屏幕,那就加上UpdateWindow()這條語句。
            MSDN的解釋
            UpdateWindow
            The UpdateWindow function updates the client area of the specified window by sending a WM_PAINT
            message to the window if the window's update region is not empty. The function sends a WM_PAINT
            message directly to the window procedure of the specified window, bypassing the application queue.
            If the update region is empty, no message is sent.
            InvalidateRect
            The system sends a WM_PAINT message to a window whenever its update region is not empty and
            there are no other messages in the application queue for that window.
            翻譯成中文大概的解釋如下:
            UpdateWindow:如果有無效區,則馬上sending a WM_PAINT message到窗口處理過程,不進消息隊列進行排隊等待,立即刷新窗口,否則,什么都不做。
            InvalidateRect:設置無效區,如果為NULL參數,則設置整個窗口為無效區。當應用程序的那個窗口的消息隊列為空時,則sending a WM_PAINT message(即使更新區域為空).在sending a WM_PAINT message的所有InvalidateRect的更新區域會累加。
            1:設置無效區
            InvalidateRect
            2:立即刷新
            UpdateWindow();
            如果不調用 InvalidateRect就調用 UpdateWindow,那么UpdateWindow什么都不做。 ??????
            如果調用 InvalidateRect 后不調用UpdateWindow,則系統會自動在窗口消息隊列為空的時候,系統自動發送一WM_PAINT消息。
            調用UpdateWindow()時將會發送一個WM_PAINT消息,而應用程序在接收到WM_PAINT消息后,將自動地調用Invalidate(),所以,在程序代碼中,不一定要出現Invalidate()!
            UpdateWindow()就是立即發送WM_PAINT消息,只對聲明無效的區域起作用,
            Invalidate()則是聲明無效的方式之一。
            Invalidate()表示客戶區域無效,在下次WM_PAINT發生時重繪。而WM_PAINT是由系統進行維護的,每當CWnd的更新區域不為空,并且在應用程序的窗口消息隊列中沒有其它消息時,Windows就發送一條WM_PAINT消息。
            Invalidate里面有個bool型的參數,用來標識重繪的時候是否用背景色填充。是不是用SetBkcolor函數?下去繼續研究。
            updateWindow則是要求系統對區域進行立即重繪。
            看到有人在網上提出問題,他在Invalidate后面又寫了繪圖的函數但是沒有執行,因為invalidate執行過以后轉到PAINT命令了。所以后面的都沒有顯示。
            也終于想通我繪的圖一直在閃啊閃,因為我在PAINT里面用到Invalidate()函數,所以他不停的自嵌套,倒是繪的圖不停的閃。
            Invalidate讓客戶區處于可以重畫的狀態,而UpdateWindow開始重畫,但是它先判斷客戶區是否為空,不空UpdateWindow不執行,為空才執行重畫。
            Invalidat最后也是調用InvalidatRect,在windows API里只有InvalidatRect的
            posted on 2011-07-01 13:55 erran 閱讀(816) 評論(0)  編輯 收藏 引用 所屬分類: MFC
            久久精品国产精品国产精品污| 国产免费久久精品丫丫| 精品多毛少妇人妻AV免费久久 | 精品熟女少妇a∨免费久久| 麻豆精品久久精品色综合| 精品国产日韩久久亚洲| 久久发布国产伦子伦精品| 久久久久国产一级毛片高清板| 国产激情久久久久久熟女老人| 亚洲欧美日韩精品久久| 无码国内精品久久人妻蜜桃| 久久精品国产亚洲Aⅴ香蕉| 亚洲va久久久噜噜噜久久男同| 国产精品免费久久久久影院| 亚洲AV无码一区东京热久久| 久久伊人五月天论坛| 国产午夜精品久久久久免费视| 中文字幕无码久久精品青草| 成人a毛片久久免费播放| A狠狠久久蜜臀婷色中文网| 久久精品国产久精国产果冻传媒| 亚洲一区中文字幕久久| 狠狠色丁香久久综合婷婷| 久久水蜜桃亚洲av无码精品麻豆| 日韩精品无码久久一区二区三| 久久亚洲精品视频| 久久99热只有频精品8| 色妞色综合久久夜夜| 亚洲日本va中文字幕久久| 久久精品国产免费观看三人同眠| 久久笫一福利免费导航 | 色综合色天天久久婷婷基地| 精品久久久久久无码专区| 综合久久国产九一剧情麻豆| 2020久久精品亚洲热综合一本| 日韩AV毛片精品久久久| 久久精品极品盛宴观看| 久久人人爽人人爽人人片AV东京热| 亚洲精品乱码久久久久久蜜桃| 久久免费香蕉视频| 久久亚洲精品无码aⅴ大香|