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

            天下

            記錄修行的印記

            WM_PAINT(父子窗口間)

            WM_PAINT(父子窗口間)

            窗口句柄(HWND)都是由操作系統內核管理的,系統內部有一個z
            -order序列,記錄著當前從屏幕底部(假象的從屏幕到眼睛的方向),到屏幕最高層的一個窗口句柄的排序,這個排序不關注父窗口還是子窗口。
            當任意一個窗口接受到WM_PAINT消息產生重繪,更新區繪制完成以后,就搜索它的前面的一個窗口,如果此窗口的范圍和更新區有交集,就向這個發送wm_paint消息,周而復始,直到執行到頂層窗口。才算完成。


            對于一個對話框(主窗口來說,設置了WS_CLIPCHILDREN樣式時,其所有子窗口都在他的前面——也就是更靠近眼睛的位置),所以主窗口接受wm_paint繪制完成后,會引起更新區上所有子窗口的重繪(所有子窗口也是從底到外排序的)。


            只要有更新區域的產生.
            無所謂誰管,每個窗口都是對等的,都有自己的消息相應函數,只不過屬性不同。

            邏輯上可以這么理解,但其實,操作系統是按主窗口排序,然后一個主窗口的所有子窗口是等級的,它們再一個排序。所以邏輯上可以說,系統中所有窗口句柄都有個排序。


            子窗口無效不會引起父窗口重繪,父窗口無效,如果父窗口(沒有WS_CLIPCHILDREN屬性)收到WM_PAINT,則所有子窗口都會在父窗口處理WM_PAINT之后收到WM_PAINT重繪消息,當然,如果父窗口帶有屬性WS_CLIPCHILDREN,則不會引起子窗口重繪 

            子窗口更新區域

            子窗口是具有WS_CHILD或者WS_CHILDWINDOW樣式的窗口。和一般窗口一樣,子窗口通過WM_PAINT來繪圖。子窗口也維護一個更新區域,應用程序和系統都可以通過設置該更新區域來產生WM_PAINT消息。

            子窗口的更新和顯示區域受到父窗口的影響,其他樣式的窗口則不會。系統常常設置父窗口的更新區域的同時設置子窗口的更新區域,使父窗口收到WM_PAINT消息的同時子窗口也能收到WM_PAINT消息。系統把子窗口的位置限制在父窗口的client區域,超出這個區域就會被裁減掉。

            無論何時,只要父窗口的更新區域包含了子窗口的一部分,系統就會為子窗口設置更新區域。此時,系統先向父窗口發送WM_PAINT消息,然后向子窗口發送消息讓子窗口可以恢復被父窗口覆蓋的內容。

            但是如果只有子窗口設置了更新區域,系統不會給父窗口也設置。在無效化子窗口時,系統不會給父窗口發WM_PAINT(因為被覆蓋住了,根本沒有必要)。同樣的,如果使被子窗口覆蓋住的父窗口的部分無效化,系統也不會給父窗口發送WM_PAINT的。在這種情況下,無論子窗口還是父窗口都不會收到WM_PAINT消息。

            應用程序如果設置了WS_CLIPCHILDREN這個樣式的話,當父窗口的更新區域被設置的時候,子窗口的更新區域不會被設置。父窗口作用在子窗口下面的任何繪圖全部被裁減掉。

            子窗口的更新和可視區域也受到兄弟窗口的影響。如果兩個窗口重疊,則兩個窗口都會收到WM_PAINT消息。他們受到WM_PAINT消息的順序與z
            -index相反,即最上面的(z-order最高)的收到WM_PAINT消息最晚。

            應用程序可以設置WS_CLIPSIBLING來避免兄弟窗口的繪制重疊。設置了這個,高z
            -order的窗口部分就被下面的窗口裁減掉了。


            父窗口先收到WM_PAINT,先繪制父窗口,然后再刷新子窗口
            WS_CLIPCHILDREN是來設置父窗口的屬性的,設置以后,父窗口刷新的時候不再自動去刷新子窗口的區域,需要你自己去刷新子控件區域

            WS_CLIPCHILDREN

            好,到此為止,應該說點有結論的話了。
            1)WS_CLIPCHILDREN樣式主要是用于父窗口,也就是說當在父窗口繪制的時候,父窗口上還有一個子窗口,那么設置了這個樣式的話,子窗口區域父窗口就不負責繪制。
            2)所有的overlapped和popup風格的窗口,都有WS_CLIPSIBLINGS 屬性。也就是說這類風格的窗口,你是去不掉WS_CLIPSIBLINGS 屬性的,不會在它重疊的兄弟窗口繪圖;
            3)更進一步說明,WS_CLIPSIBLINGS只是用于子窗口(For use with the WS_CHILD style only.)
            4)WS_CLIPSIBLINGS實際上還需要和控件的疊放順序(z order)配合使用,才能看出明顯的效果。

            posted on 2012-01-05 14:26 天下 閱讀(2272) 評論(0)  編輯 收藏 引用 所屬分類: Win32

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久乐国产综合亚洲精品| 久久精品国产亚洲Aⅴ香蕉 | 好属妞这里只有精品久久| 久久被窝电影亚洲爽爽爽| 久久国产精品视频| 久久99精品国产麻豆宅宅| 久久久久噜噜噜亚洲熟女综合| 久久久国产99久久国产一| 久久精品9988| 性欧美丰满熟妇XXXX性久久久| 久久无码人妻精品一区二区三区| 久久99中文字幕久久| 思思久久好好热精品国产| 伊人久久综在合线亚洲2019| 欧洲人妻丰满av无码久久不卡 | 欧美牲交A欧牲交aⅴ久久| 国内精品久久久久久久coent| 久久久久免费精品国产| 日本精品久久久久影院日本 | 无码人妻久久一区二区三区蜜桃| 久久国产乱子伦精品免费午夜| 久久精品人人做人人爽电影蜜月| 伊人久久大香线蕉亚洲五月天| 久久天天躁狠狠躁夜夜躁2014| 精品99久久aaa一级毛片| 精品久久久久久久无码| 国内精品久久久久久野外| 久久久久亚洲av综合波多野结衣| 国产女人aaa级久久久级| 久久久久综合国产欧美一区二区| 久久精品国产亚洲av麻豆小说| 久久精品卫校国产小美女| 无码乱码观看精品久久| 欧美久久久久久午夜精品| 国产成人久久精品麻豆一区| 777久久精品一区二区三区无码 | 久久一区二区三区99| 久久婷婷五月综合成人D啪| 欧美久久久久久午夜精品| 香蕉久久AⅤ一区二区三区| 一级a性色生活片久久无少妇一级婬片免费放|