• <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>

            Invalidate()

            InvalidateRect只是增加重繪區(qū)域,在下次WM_PAINT的時(shí)候才生效

            InvalidateRect函數(shù)中的參數(shù)TRUE表示系統(tǒng)會(huì)在你畫之前用背景色將所選區(qū)域覆蓋一次,默認(rèn)背景色為白色,可以通過(guò)設(shè)置BRUSH來(lái)改變背景色。

            Invalidate()之后:
            ...OnPaint()->OnPrepareDC()->OnDraw()
            所以只是刷新在OnPaint()和OnDraw()函數(shù)中的繪圖語(yǔ)句。其它地方?jīng)]有影響。

            Invalidate標(biāo)記一個(gè)需要重繪的無(wú)效區(qū)域,并不意味著調(diào)用該函數(shù)后就立刻進(jìn)行重繪。類似于PostMessage(WM_PAINT),需要處理到WM_PAINT消息時(shí)才真正重繪。以為您Invalidate之后還有其他的語(yǔ)句正在執(zhí)行,程序沒(méi)有機(jī)會(huì)去處理WM_PAINT消息,但當(dāng)函數(shù)執(zhí)行完畢后,消息處理才得以進(jìn)行。

            Invalidate只是放一個(gè)WM_PAINT消息在隊(duì)列里,不做別的,所以只有當(dāng)當(dāng)前函數(shù)返回后,進(jìn)入消息循環(huán),取出WM_PAINT,才執(zhí)行PAINT,所以不管Invalidate放哪里,都是最后的。

            InvalidateRect(hWnd,&rect,TRUE);向hWnd窗體發(fā)出WM_PAINT的消息,強(qiáng)制客戶區(qū)域重繪制,
            rect是你指定要刷新的區(qū)域,此區(qū)域外的客戶區(qū)域不被重繪,這樣防止客戶區(qū)域的一個(gè)局部的改動(dòng),而導(dǎo)致整個(gè)客戶區(qū)域重繪而導(dǎo)致閃爍,如果最后的參數(shù)為TRUE,則還向窗體發(fā)送WM_ERASEBKGND消息,使背景重繪,當(dāng)然在客戶區(qū)域重繪之前。
            UpdateWindow只向窗體發(fā)送WM_PAINT消息,在發(fā)送之前判斷GetUpdateRect(hWnd,NULL,TRUE)看有無(wú)可繪制的客戶區(qū)域,如果沒(méi)有,則不發(fā)送WM_PAINT

            如果希望立即刷新無(wú)效區(qū)域,可以在調(diào)用InvalidateRect之后調(diào)用UpdateWindow,如果客戶區(qū)的任一部分無(wú)效,則UpdateWindow將導(dǎo)致Windows用WM_PAINT消息調(diào)用窗口過(guò)程(如果整個(gè)客戶區(qū)有效,則不調(diào)用窗口過(guò)程)。這一WM_PAINT消息不進(jìn)入消息隊(duì)列,直接由WINDOWS調(diào)用窗口過(guò)程。窗口過(guò)程完成刷新以后立刻退出,WINDOWS將控制返回給程序中UpdateWindow調(diào)用之后的語(yǔ)句。(windows程序設(shè)計(jì)第5版 P98)

            UpdateData()順便說(shuō)下,這個(gè)函數(shù)不是刷新界面用的。
            UpdateData();參數(shù)為FALSE時(shí),將界面上控件綁定的變量的數(shù)據(jù)導(dǎo)到控件內(nèi),參數(shù)為TRUE時(shí),導(dǎo)入方向則相反

             

            附:Invalidate 與WM_PAINT之間的關(guān)系

            系統(tǒng)會(huì)在多個(gè)不同的時(shí)機(jī)發(fā)送WM_PAINT消息:當(dāng)?shù)谝淮蝿?chuàng)建一個(gè)窗口時(shí),當(dāng)改變窗口的大小時(shí),當(dāng)把窗口從另一個(gè)窗口背后移出時(shí),當(dāng)最大化或最小化窗口時(shí),等等,這些動(dòng)作都是由系統(tǒng)管理的,應(yīng)用只是被動(dòng)地接收該消息,在消息處理函數(shù)中進(jìn)行繪制操作;大多數(shù)的時(shí)候應(yīng)用也需要能夠主動(dòng)引發(fā)窗口中的繪制操作,比如當(dāng)窗口顯示的數(shù)據(jù)改變的時(shí)候,這一般是通過(guò)InvalidateRect和 InvalidateRgn函數(shù)來(lái)完成的。InvalidateRect和InvalidateRgn把指定的區(qū)域加到窗口的Update Region中,當(dāng)應(yīng)用的消息隊(duì)列沒(méi)有其他消息時(shí),如果窗口的Update Region不為空時(shí),系統(tǒng)就會(huì)自動(dòng)產(chǎn)生WM_PAINT消息。

            系統(tǒng)為什么不在調(diào)用Invalidate時(shí)發(fā)送WM_PAINT消息呢?又為什么非要等應(yīng)用消息隊(duì)列為空時(shí)才發(fā)送WM_PAINT消息呢?這是因?yàn)橄到y(tǒng)把在窗口中的繪制操作當(dāng)作一種低優(yōu)先級(jí)的操作,于是盡可能地推后做,這樣有利于提高繪制的效率:在兩個(gè)WM_PAINT消息之間多個(gè)Invalidate調(diào)用使之失效的區(qū)域就會(huì)被累加起來(lái),然后在一個(gè)WM_PAINT消息中一次得到更新,不僅能避免多次重復(fù)地更新同一區(qū)域,也優(yōu)化了應(yīng)用的更新操作。像這種通過(guò)InvalidateRect和InvalidateRgn來(lái)使窗口區(qū)域無(wú)效,依賴于系統(tǒng)在合適的時(shí)機(jī)發(fā)送WM_PAINT消息的機(jī) 制實(shí)際上是一種異步工作方式,也就是說(shuō),在無(wú)效化窗口區(qū)域和發(fā)送WM_PAINT消息之間是有延遲的;有時(shí)候這種延遲并不是我們希望的,這時(shí)我們當(dāng)然可以在無(wú)效化窗口區(qū)域后利用SendMessage 發(fā)送一條WM_PAINT消息來(lái)強(qiáng)制立即重畫,但不如使用Windows GDI為我們提供的更方便和強(qiáng)大的函數(shù):UpdateWindow和RedrawWindow。UpdateWindow會(huì)檢查窗口的Update Region,當(dāng)其不為空時(shí)才發(fā)送WM_PAINT消息;RedrawWindow則給我們更多的控制:是否重畫非客戶區(qū)和背景,是否總是發(fā)送WM_PAINT消息而不管Update Region是否為空等

            posted on 2008-03-11 15:34 弱水一瓢 閱讀(1690) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            文章分類

            最新評(píng)論

            AAA级久久久精品无码区| 久久精品免费观看| 久久精品国产亚洲一区二区三区| 久久福利青草精品资源站免费| 99久久精品费精品国产一区二区| 久久大香香蕉国产| 久久国产精品-久久精品| 91精品无码久久久久久五月天| 国产精品成人久久久久三级午夜电影 | 伊人久久久AV老熟妇色| 人妻精品久久无码区| 久久国产免费观看精品| 热综合一本伊人久久精品| 狠狠色婷婷久久综合频道日韩 | 久久天天躁狠狠躁夜夜躁2014| 日韩乱码人妻无码中文字幕久久 | 久久久女人与动物群交毛片 | 91久久婷婷国产综合精品青草| 欧美国产精品久久高清| 精品久久久久久中文字幕大豆网| 99久久综合狠狠综合久久止| 伊人久久大香线蕉综合网站| 久久精品国产99国产精品澳门| 久久久国产视频| 成人亚洲欧美久久久久| 日日噜噜夜夜狠狠久久丁香五月| 成人国内精品久久久久影院VR| 波多野结衣AV无码久久一区| 久久精品夜色噜噜亚洲A∨| 久久精品亚洲日本波多野结衣 | 日本精品久久久久中文字幕8| 亚洲va中文字幕无码久久不卡| 久久久国产一区二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久人人爽人人爽人人片AV东京热| 久久久久97国产精华液好用吗| 久久福利青草精品资源站免费| 99精品久久精品一区二区| 欧美噜噜久久久XXX| 国内精品久久久久影院薰衣草| 久久午夜无码鲁丝片秋霞|