欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解
我是個(gè)喜歡瞎琢磨的人。尤其是這幾天心情非常郁悶。于是開(kāi)始琢磨了…….琢磨的問(wèn)題就是WS_CLIPCHILDREN和WS_CLIPSIBLINGS兩種窗口樣式的理解。

  1.求助MSDN

  我的第一步當然是求助MSDN。在MSDN里面有詳細的解釋。

  1.1 WS_CLIPCHILDREN

  WS_CLIPCHILDREN樣式從字面上可以理解成ClipChildren,裁減子窗口。

  MSDN里的E文解釋?zhuān)篍xcludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.

  讀E文是一件困難的事,為了不讓大家再重復我的痛苦,我就越俎代庖翻譯一下:WS_CLIPCHILDREN樣式主要是用于父窗口,也就是說(shuō)當在父窗口繪制的時(shí)候,父窗口上還有一個(gè)子窗口,那么設置了這個(gè)樣式的話(huà),子窗口區域父窗口就不負責繪制。

  那么按照MSDN的理解,可以用下面這幅圖來(lái)表示:

  圖 1?1 WS_CLIPCHILDREN樣式的初理解

  1.1 WS_CLIPSIBLINGS

  WS_CLIPSIBLINGS樣式從字面上可以理解成ClipSiblings,裁減兄弟窗口。

  MSDN里的E文解釋?zhuān)篊lips 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.
中文意思是:子窗口間相互裁減。也就是說(shuō)當兩個(gè)窗口相互重疊時(shí),設置了WS_CLIPSIBLINGS樣式的子窗口重繪時(shí)不能繪制被重疊的部分。反之沒(méi)有設置WS_CLIPSIBLINGS樣式的子窗口重繪時(shí)是不考慮重疊不重疊,統統重繪。


  圖 1?2 WS_CLIPSIBLINGS樣式的初理解

  2.求助Google

  最初看完MSDN,說(shuō)實(shí)話(huà),沒(méi)有像現在這么清晰畫(huà)出上面兩幅圖。而是一片茫然。Google上我所搜索到的中文的還算是比較好的一篇,應該是這篇:http://blog.163.com/sandylin_wind/blog/static/935500552008105104617806/

  大家可以看看,但是確實(shí)我覺(jué)得還不夠詳細,因此才會(huì )寫(xiě)篇博文,討論一下這個(gè)問(wèn)題。

  當然E文的專(zhuān)注于WS_CLIPCHILDREN和WS_CLIPSIBLINGS討論的也比較少??赡芾贤庥捎诙瓻文,所以不像我們這樣費事。

  經(jīng)過(guò)一番搜索,仍然有一些比較重要的結論,列舉如下:

 ?。?)所有的overlapped和popup風(fēng)格的窗口,都有WS_CLIPSIBLINGS 屬性。也就是說(shuō)這類(lèi)風(fēng)格的窗口,你是去不掉WS_CLIPSIBLINGS 屬性的,不會(huì )在它重疊的兄弟窗口繪圖;

 ?。?)更進(jìn)一步說(shuō)明,WS_CLIPSIBLINGS只是用于子窗口(For use with the WS_CHILD style only.)

  當然在Google上搜索,通常會(huì )有意外發(fā)現,一般和這個(gè)主題相關(guān)的往往是控件如何透明的問(wèn)題。這里也給大家幾個(gè)關(guān)于控件透明的討論。
(1)      http://www.pocketpcjunkies.com/Uwe/Forum.aspx/wince-vc/4744/Transparent-bitmap-button。這個(gè)是關(guān)于控件上繪制位圖,然后透明的討論。在桌面系統和WinCE的CreateWindoowsEx還有一些細微的差別,在WinCE上隱含地指定了窗口具備WS_CLIPCHILDREN和WS_CLIPSIBLINGS風(fēng)格;

 ?。?)      http://www.pocketpcdn.com/articles/transparent_static.html這個(gè)是關(guān)于控件上面文本透明的例子。

  3.做幾個(gè)實(shí)驗

  3.1 驗證 WS_CLIPCHILDREN

  簡(jiǎn)單到什么程度呢?只需要在對話(huà)框的屬性打個(gè)勾而已。

簡(jiǎn)單到什么程度呢?只需要在對話(huà)框的屬性打個(gè)勾而已。

  圖 3?1 如何設置對話(huà)框Clip Children屬性

  我們先做做第一個(gè)程序,這個(gè)程序唯一有點(diǎn)難的地方就在于需要繼承一下CStatic類(lèi),然后重載一下OnPaint函數。

void MYStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
 
// TODO: Add your message handler code here
 
// 獲得控件客戶(hù)區矩形大小
CRect rect;
GetClientRect(rect);
// 繪制控件邊框
dc.MoveTo(0,0);
dc.LineTo(rect.Width(),0);
dc.LineTo(rect.Width(),rect.Height());
dc.LineTo(0,rect.Height());
dc.LineTo(0,0);
 
// 繪制文本
    dc.TextOut(rect.Width()/2 - 5,rect.Height()/2 - 5,"Hello");
 
// Do not call CStatic::OnPaint() for painting messages
}
當我們不設置對話(huà)框的Clip children屬性的時(shí)候,效果如下圖所示:


  圖 3?2 效果圖

   當設置了Clip children屬性的時(shí)候,接下來(lái)是見(jiàn)證奇跡的時(shí)刻 。^_^

 


  圖 3?3 效果圖

  很明顯父窗口沒(méi)有管子窗口的背景色如何繪制。子窗口的背景只是當時(shí)桌面上現有的窗口內容。

  3.2 驗證WS_CLIPSIBLINGS

  當第一個(gè)實(shí)驗成功之后,我原以為WS_CLIPSIBLINGS也會(huì )相當地簡(jiǎn)單。結果我花費了大量的時(shí)間糾纏在這個(gè)問(wèn)題上。首先遇到的第一個(gè)問(wèn)題,當然是動(dòng)態(tài)地改樣式,這個(gè)并不是太復雜的問(wèn)題。如何動(dòng)態(tài)改樣式,見(jiàn)下面的代碼:

LONG style = GetWindowLong(m_pic.GetSafeHwnd(),GWL_STYLE);
style = style | WS_CLIPSIBLINGS ;
SetWindowLong(m_pic.GetSafeHwnd(),GWL_STYLE,style);

  然后,我在對話(huà)框上添加了一個(gè)圖片控件和一個(gè)自繪制的控件(和上例類(lèi)似,為了效果明顯,我對自繪的控件進(jìn)行了填充)

  按照我預先設想的效果,理想的情況應該如下:


圖 3?4 預想的效果圖

  發(fā)現結果很混亂,每回都得不到我想要的,具有隨機性。甚至有的時(shí)候按照我的預想,有的時(shí)候則完全不管我的心情。哪怕我氣的吹胡子瞪眼睛,也是枉然。

  最常見(jiàn)的是這樣一種情況,就是無(wú)論我設置不設置WS_CLIPSIBLINGS屬性,當點(diǎn)擊重繪圖片控件的時(shí)候(m_pic.Invalidate()),效果都一如既往,先開(kāi)始圖片控件(pic)被自定義控件(custom)壓蓋,然后重繪之后,圖片控件(pic)壓蓋自定義控件(custom)。

 


  圖 3?5 一種錯誤圖

  經(jīng)過(guò)一段時(shí)間的郁悶,我最終找到了問(wèn)題之所在,是這樣的一個(gè)結論:WS_CLIPSIBLINGS還和控件的疊加順序有關(guān)。疊加順序如果不對,你無(wú)法查看WS_CLIPSIBLINGS的效果。就上面的問(wèn)題,我們可以在VC編輯器里查看到控件的疊加順序。


  圖 3?6控件的Tab順序


  Pic控件是在custom控件的下方。(Tab Order和Z Order順序是一致的)。這樣配置不配置 WS_CLIPSIBLINGS都不能看出效果。
  但是改動(dòng)控件的壓蓋順序,令pic控件壓蓋在custom控件之上(實(shí)際上是改動(dòng) Tab order順序)
圖 3?7 控件的Tab順序
  這樣就會(huì )出現預期的效果。當不配置 WS_CLIPSIBLINGS,pic控件會(huì )壓蓋custom控件,而當配置了該屬性,則pic控件不會(huì )壓蓋custom控件,重疊的區域由custom控件自己制作。

  圖片看不清楚?請點(diǎn)擊這里查看原圖(大圖)。
  圖 3?8 預期的效果
  4.結論

  好,到此為止,應該說(shuō)點(diǎn)有結論的話(huà)了。

 ?。?)WS_CLIPCHILDREN樣式主要是用于父窗口,也就是說(shuō)當在父窗口繪制的時(shí)候,父窗口上還有一個(gè)子窗口,那么設置了這個(gè)樣式的話(huà),子窗口區域父窗口就不負責繪制。

 ?。?)所有的overlapped和popup風(fēng)格的窗口,都有WS_CLIPSIBLINGS 屬性。也就是說(shuō)這類(lèi)風(fēng)格的窗口,你是去不掉WS_CLIPSIBLINGS 屬性的,不會(huì )在它重疊的兄弟窗口繪圖;

 ?。?)更進(jìn)一步說(shuō)明,WS_CLIPSIBLINGS只是用于子窗口(For use with the WS_CHILD style only.)

 ?。?)WS_CLIPSIBLINGS實(shí)際上還需要和控件的疊放順序(z order)配合使用,才能看出明顯的效果。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
對話(huà)框屬性中設置的窗口風(fēng)格
Window Styles
TabCtrl-帶有縮放和滾動(dòng)選項卡的可調控件
CComboBoxEx 的默認樣式WNERDRAWFIXED, CBS_ONINTEGRALHEIGHT
資源修改——eXeScope及ResHacker的基本使用
對話(huà)框管理器第三章:創(chuàng )建控件
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久