MFC/WTL - WS_CLIPCHILDREN 跟 WS_CLIPSIBLINGS 的意思

WS_CLIPCHILDREN
當子視窗(s) 的顯示順序 (z-index) 是在其視窗之上的話,那麼子視窗理當看來會是在視窗上面。在視窗擁有此 style 參數且收到 WM_PAINT 訊號要重畫時,會自動避開 z-index 比自已大的子視窗,而不去畫它,保持顯示的 z index 順序。就不會有重畫完,反而都把子視窗都蓋掉的奇怪現像。

msdn 原文:

Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.

WS_CLIPSIBLINGS
WS_CLIPCHILDREN 講的是父與子的 z-index 關係,在父視窗在重畫時,不會蓋掉子視窗。那麼這個 WS_CLIPSIBLINGS 就是在指子視窗們之間的 z-index 關係。

若是子視窗們的顯示關係是依照 1, 2, 3, 4, 5, 6 的順序排著,1 的蓋住 2, 3, ...,2 的蓋住 3, 4, ...。那麼當所有的子視窗擁有此 WS_CLIPSIBLINGS參數時,在收到 WM_PAINT 訊號要重畫時,都會自動避開不畫比自已 z-index 還前面的兄弟視窗。就會使得重畫完的顯示順序與重畫前保持一致。

若是沒有設定此參數的話,然後誰在最前面則會依照誰是最後畫來決定,而不是依照更有前後意義的 z-index 來指定。

msdn 原文:

Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of the region of the child window to be updated. If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.

Ref: http://www.cnblogs.com/helloj2ee/archive/2009/05/29/1491822.html
Ref: http://msdn.microsoft.com/zh-tw/library/windows/desktop/ms632600v=vs.85).aspx(
Discuss with: Crain

comments powered by Disqus