青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

在網上關于窗口視覺效果,有2個問題被問得最多:
第一個是如何讓窗口邊框有陰影效果?
第二個是如何讓窗口控件有半透明效果?

對于第一個問題,我們的答案是用雙層窗口模擬或是用Layered Window。
在XP下可以直接在注冊窗口類時用CS_DROPSHADOW風格,系統就會自動讓你的窗口附加上陰影效果,實際上系統也是通過雙層窗口來實現的;當然我們也可以用自己的窗口來模擬陰影效果,只要讓陰影窗口永遠跟隨我們的目標窗口就可以了。
如果用Layered Window, 我們只要一個窗口,通過讓窗口支持Alpha通道,最后UpdateLayeredWindow, 即可實現陰影效果。

對于第二個問題,我們通常的答案是用雙層窗體或是DirectUI。
因為Windows繪畫是以DC為單位,而主窗口和內部控件是居于不同的DC, 所以他們不能半透明融合在一起。
另外只有Pop up的窗口才能支持Layered Window,所以只有Pop up的窗口才能實現半透明效果,所以我們通常用雙層窗口來模擬控件的半透明,也就是說窗口上面的控件其實是通過一個Pop up窗口模擬出來的。所以用這種方式實現控件的半透明效果,性能比較差,也只能實現一些簡單的界面。
還有一種控件半透明的方式是用DirectUI,所有的窗口控件都通過在主窗口上繪畫模擬出來,實現半透明效果自然也很容易了。

所以既要實現窗口的陰影效果,又要讓內部控件半透明,最終極的方式還是用WS_EX_LAYERED風格的DirectUI窗口。

其實另外還有一種既不用DirectUI,也不用雙層窗口,也能實現控件半透明的方法。
該方法的關鍵是控件在Paint自己時,首先向主窗口詢問,獲取主窗口上控件所在區域的背景圖,然后控件先將此背景畫到自己的DC上,然后在再畫自己,這樣可以讓控件看起來像是直接畫在主窗口上一樣。
當然該方法也只能針對一些簡單的UI,如果子窗口層次很多,或是控件個數很多,都會有性能影響。

核心代碼如下:
HBRUSH AtlGetBackgroundBrush(HWND hWnd, HWND hwndParent)
{
   CWindow wnd = hWnd;
   CWindow wndParent = hwndParent;
   CClientDC dcParent = wndParent;
   CRect rcParent;
   wndParent.GetWindowRect(&rcParent);
   CDC dcCompat1;
   dcCompat1.CreateCompatibleDC(dcParent);
   CBitmap bmpCompat1;
   bmpCompat1.CreateCompatibleBitmap(dcParent, rcParent.Width(), rcParent.Height());
   HBITMAP hOldBmp1 = dcCompat1.SelectBitmap(bmpCompat1);
   wndParent.SendMessage(WM_PRINTCLIENT, (WPARAM) (HDC) dcCompat1, (LPARAM)(PRF_ERASEBKGND | PRF_CLIENT | PRF_NONCLIENT));
   CRect rcWin;
   wnd.GetWindowRect(&rcWin);
   CDC dcCompat2;
   dcCompat2.CreateCompatibleDC();
   CBitmap bmpCompat2;
   bmpCompat2.CreateCompatibleBitmap(dcCompat1, rcWin.Width(), rcWin.Height());
   HBITMAP hOldBmp2 = dcCompat2.SelectBitmap(bmpCompat2);
   CRect rcSnap = rcWin;
   ::MapWindowPoints(NULL, wndParent, (LPPOINT) (LPRECT) &rcSnap, 2);
   dcCompat2.BitBlt(0, 0, rcWin.Width(), rcWin.Height(), dcCompat1, rcSnap.left, rcSnap.top, SRCCOPY);
   HBRUSH hBrush = ::CreatePatternBrush(bmpCompat2);
   dcCompat1.SelectBitmap(hOldBmp1);
   dcCompat2.SelectBitmap(hOldBmp2);
   return hBrush;
}

下面是一個簡單的Demo:


Demo源代碼: TransparentControl Demo
注:Demo上的文字因為是直接用GDI畫的,所以沒有支持Alpha通道
posted on 2012-08-23 00:38 Richard Wei 閱讀(7387) 評論(4)  編輯 收藏 引用 所屬分類: windows desktop

FeedBack:
# re: 如何讓窗口控件半透明
2012-08-23 09:32 | zaccheo
如何讓窗口邊框有陰影效果?

如果僅僅是實現這個,就貼一個帶有陰影效果的png圖片上去,再UpdateLayeredWindow就可以了。但是這么做會導致窗口上的子控件不能正常顯示。所以我感覺還是要用兩個窗口模擬。
  回復  更多評論
  
# re: 如何讓窗口控件半透明
2012-08-27 00:24 | zhaoyg
大規模應用透明效果的話,貌似只有directUI或WPF了吧  回復  更多評論
  
# re: 如何讓窗口控件半透明
2012-08-28 20:07 | js
厲害啊
學習了  回復  更多評論
  
# re: 如何讓窗口控件半透明
2012-08-30 16:56 | 畢達哥拉斯半圓
我在學習用Direct2D實現  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美午夜久久| 国产精品婷婷午夜在线观看| 久久理论片午夜琪琪电影网| 9l国产精品久久久久麻豆| 亚洲欧美日韩高清| 国产精品麻豆va在线播放| 夜夜嗨av一区二区三区| 欧美国产一区视频在线观看| 欧美伊人久久| 亚洲国产精品久久久久婷婷老年| 久久久久9999亚洲精品| 午夜精品短视频| 国产麻豆精品久久一二三| 久久天堂成人| 一本色道久久综合狠狠躁的推荐| 久久综合中文| 麻豆成人91精品二区三区| 在线电影一区| 亚洲福利国产精品| 欧美—级在线免费片| 一区二区三区免费观看| 亚洲视频在线观看网站| 国产欧美日韩精品丝袜高跟鞋| 国产乱肥老妇国产一区二| 亚洲欧美一区二区激情| 亚洲午夜精品网| 国产在线精品成人一区二区三区| 久久夜色精品国产欧美乱极品| 久久久久久久性| 亚洲精选一区| 亚洲伊人网站| 一本一本久久a久久精品综合麻豆| 亚洲深夜av| 韩国精品久久久999| 亚洲国产一区二区视频| 欧美四级在线观看| 久久婷婷综合激情| 欧美理论电影网| 久久爱另类一区二区小说| 久久久伊人欧美| 亚洲图片欧美一区| 久久精品国产免费观看| 久久久久久久一区二区| 亚洲深夜福利视频| 在线日本高清免费不卡| 日韩视频中文字幕| 老司机精品视频网站| 亚洲视频在线播放| 久久久www成人免费精品| 99精品欧美一区二区三区综合在线| 亚洲视频一区二区在线观看| 在线看国产日韩| 1024精品一区二区三区| 久久蜜臀精品av| 欧美日韩亚洲一区三区| 久久久久高清| 欧美日本国产| 美国十次成人| 国产精品综合色区在线观看| 亚洲国产精品精华液2区45| 国产欧美日韩不卡免费| 日韩一级在线| 亚洲精品婷婷| 久久久www成人免费精品| 亚洲综合色婷婷| 欧美精品日本| 欧美大色视频| 久久夜色精品一区| 久久爱另类一区二区小说| 欧美日韩国产二区| 欧美电影美腿模特1979在线看 | 欧美精品一区二区三区久久久竹菊 | 欧美影片第一页| 精品不卡在线| 欧美国产精品劲爆| 国产精品久久久一区麻豆最新章节| 久久久久久久综合狠狠综合| 欧美精品aa| 美女精品网站| 国内成+人亚洲| 亚洲欧美日韩中文视频| 亚洲欧美日韩成人| 欧美亚州韩日在线看免费版国语版| 亚洲国产精品一区在线观看不卡| 国产日韩欧美视频| 久久婷婷国产综合尤物精品| 国产精品免费在线| 一本色道久久综合亚洲精品小说| 99热免费精品在线观看| 欧美精品久久久久久久免费观看 | 欧美日韩国产一区二区| 欧美一区二区三区精品| 国产精品vvv| 亚洲视频一起| 欧美在线视频播放| 老色鬼久久亚洲一区二区 | 欧美视频在线不卡| 亚洲精品国产精品国自产观看浪潮 | 亚洲国产高清一区| 亚洲国产精品久久91精品| 美女网站久久| 亚洲电影免费| 欧美精品粉嫩高潮一区二区| 亚洲国产欧洲综合997久久| 日韩午夜av| 国产精品久久久| 久久超碰97人人做人人爱| 美国成人直播| 99国产麻豆精品| 久久久久久久性| 欧美精品首页| 亚洲综合丁香| 久久一综合视频| 亚洲裸体视频| 国产精品色婷婷久久58| 欧美在线首页| 亚洲国产天堂久久综合网| 亚洲性线免费观看视频成熟| 国产精品色午夜在线观看| 久久av一区二区三区| 欧美激情一区二区三区| 亚洲欧美在线磁力| 国产精品伊人日日| 久久疯狂做爰流白浆xx| 欧美激情综合色| 午夜一级在线看亚洲| 欧美a级理论片| 亚洲视频日本| 欧美国产精品一区| 欧美淫片网站| 日韩一级成人av| 国产永久精品大片wwwapp| 欧美黄色成人网| 99精品视频一区二区三区| 亚洲视频在线一区| 国产欧美日韩一区二区三区在线 | 国产精品欧美久久| 久久这里只有精品视频首页| 亚洲美女啪啪| 欧美成人午夜免费视在线看片| 亚洲愉拍自拍另类高清精品| 在线不卡a资源高清| 欧美新色视频| 欧美国产视频在线| 久久久五月婷婷| 亚洲欧美日韩在线高清直播| 亚洲国产婷婷| 玖玖玖免费嫩草在线影院一区| 亚洲欧美国产制服动漫| 91久久精品国产| 久久久久国产精品www| 亚洲少妇最新在线视频| 亚洲福利在线观看| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲高清视频在线观看| 国产精品视频一| 欧美日韩亚洲成人| 欧美aⅴ99久久黑人专区| 久久精品国产69国产精品亚洲| 亚洲色图制服丝袜| 国产视频精品网| 女主播福利一区| 久久久久久久久综合| 欧美一二三视频| 亚洲欧美视频在线观看| 国产精品99久久久久久久久久久久 | 国产一区二区三区久久久| 欧美激情一区二区久久久| 久久精品亚洲一区二区| 午夜影视日本亚洲欧洲精品| 亚洲午夜一区二区三区| 在线综合亚洲| 一区二区三区四区五区在线| 亚洲欧美一区二区激情| 亚洲国产日韩欧美在线动漫| 狠狠色狠狠色综合日日tαg| 国产欧美一区二区色老头| 国产精品素人视频| 国产精品视频免费| 国产日韩精品在线| 国产一区二区成人| 亚洲午夜精品久久久久久浪潮 | 久久免费的精品国产v∧| 香蕉久久夜色| 久久黄色小说| 裸体丰满少妇做受久久99精品| 久久久久久久性| 免费短视频成人日韩| 欧美国产第一页| 欧美日韩国产91| 国产精品色一区二区三区| 国产深夜精品| 亚洲激情欧美| 这里只有精品视频在线| 亚洲欧美另类综合偷拍| 久久成人精品无人区| 久久性色av| 亚洲激情亚洲| 久久国产精品99精品国产| 久久久国产成人精品|