精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C# Winform實現炫酷的透明動畫界面

開發 后端
有些人會說為什么不直接用WPF啊,Wpf和Winform各有優缺點,適應不同的場合。Winform相對于使用更簡單一些,系統要求更低。當然需要看人的習慣了和擅長的。

做過.NET Winform窗體美化的人應該都很熟悉UpdateLayeredWindow吧,UpdateLayeredWindow可以實現窗體的任意透明,效果很好,不會有毛邊。不過使用這個API之后,會有一個問題就是無法使用普通控件,而且沒有Paint消息。為了解決這個問題,有兩種方法。

一、使用雙層窗體,底層窗體使用UpdateLayeredWindow作為背景,上層窗體用普通窗體,并且可以使用TransparencyKey或者Region來實現去除不需要的窗體內容,讓上層窗體能看到底層的窗體。

二、直接單層窗體,使用控件的DrawToBitmap把控件圖像繪制到UpdateLayeredWindow 的窗體上,這樣就可以看到普通控件了。不過這個也有問題:1.控件內容不能自動更新  2.效率低,很多控件使用DrawToBitmap繪制出的圖像不完整,甚至繪制不出圖像。比如TextBox無法顯示光標,WebBrowser無法 顯示內容。

 三、采用DirectUI技術,重寫所有基礎控件。效果最好,不過工作量巨大。

使用UpdateLayeredWindow時,一般是需要對Bitmap緩存起來,通過設置剪輯區域,局部重繪來提高效率。另外還可以異步重繪,模擬Winform的失效到重繪。

有些人會說為什么不直接用WPF啊,Wpf和Winform各有優缺點,適應不同的場合。Winform相對于使用更簡單一些,系統要求更低。當然需要看人的習慣了和擅長的。

UpdateLayeredWindow 基本使用方法:

  1. protected   override  CreateParams CreateParams 
  2.            { 
  3.               get 
  4.                   { 
  5.                  CreateParams cp  =   base .CreateParams; 
  6.                  cp.ExStyle  |=   0x00080000 ;  //  WS_EX_LAYERED 擴展樣式 
  7.                   return  cp; 
  8.              } 
  9.          }  

重寫窗體的 CreateParams 屬性

API調用:

  1. public   void  SetBitmap(Bitmap bitmap,  byte  opacity) 
  2.     { 
  3.      if  (bitmap.PixelFormat  !=  PixelFormat.Format32bppArgb) 
  4.          throw   new  ApplicationException( "位圖必須是32位包含alpha 通道" ); 
  5.   
  6.     IntPtr screenDc  =  Win32.GetDC(IntPtr.Zero); 
  7.     IntPtr memDc  =  Win32.CreateCompatibleDC(screenDc); 
  8.     IntPtr hBitmap  =  IntPtr.Zero; 
  9.     IntPtr oldBitmap  =  IntPtr.Zero; 
  10.   
  11.      try  
  12.          { 
  13.         hBitmap  =  bitmap.GetHbitmap(Color.FromArgb( 0 ));   // 創建GDI位圖句柄,效率較低 
  14.         oldBitmap  =  Win32.SelectObject(memDc, hBitmap); 
  15.   
  16.         Win32.Size size  =   new  Win32.Size(bitmap.Width, bitmap.Height); 
  17.         Win32.Point pointSource  =   new  Win32.Point( 0 ,  0 ); 
  18.         Win32.Point topPos  =   new  Win32.Point(Left, Top); 
  19.         Win32.BLENDFUNCTION blend  =   new  Win32.BLENDFUNCTION(); 
  20.         blend.BlendOp              =  Win32.AC_SRC_OVER; 
  21.         blend.BlendFlags           =   0 ; 
  22.         blend.SourceConstantAlpha  =  opacity; 
  23.         blend.AlphaFormat          =  Win32.AC_SRC_ALPHA; 
  24.   
  25.         Win32.UpdateLayeredWindow(Handle, screenDc,  ref  topPos,  ref  size, memDc,  ref  pointSource,  0 ,  ref  blend, Win32.ULW_ALPHA); 
  26.     } 
  27.      finally  
  28.          { 
  29.         Win32.ReleaseDC(IntPtr.Zero, screenDc); 
  30.          if  (hBitmap  !=  IntPtr.Zero) 
  31.               { 
  32.             Win32.SelectObject(memDc, oldBitmap); 
  33.               
  34.             Win32.DeleteObject(hBitmap); 
  35.         } 
  36.         Win32.DeleteDC(memDc); 
  37.     } 
  38. }  

API聲明:

  1. class  Win32 
  2.     { 
  3.      public   enum  Bool 
  4.         { 
  5.         False  =   0 , 
  6.         True 
  7.     } ; 
  8.   
  9.   
  10.     [StructLayout(LayoutKind.Sequential)] 
  11.      public   struct  Point 
  12.          { 
  13.          public  Int32 x; 
  14.          public  Int32 y; 
  15.   
  16.           public  Point(Int32 x, Int32 y)  
  17.           {  this .x  =  x;  this .y  =  y; } 
  18.     } 
  19.   
  20.   
  21.     [StructLayout(LayoutKind.Sequential)] 
  22.      public   struct  Size 
  23.          { 
  24.          public  Int32 cx; 
  25.          public  Int32 cy; 
  26.   
  27.           public  Size(Int32 cx, Int32 cy)  
  28.             {  this .cx  =  cx;  this .cy  =  cy; } 
  29.     } 
  30.   
  31.   
  32.     [StructLayout(LayoutKind.Sequential, Pack  =   1 )] 
  33.      struct  ARGB 
  34.         { 
  35.          public   byte  Blue; 
  36.          public   byte  Green; 
  37.          public   byte  Red; 
  38.          public   byte  Alpha; 
  39.     } 
  40.   
  41.   
  42.     [StructLayout(LayoutKind.Sequential, Pack  =   1 )] 
  43.      public   struct  BLENDFUNCTION 
  44.          { 
  45.          public   byte  BlendOp; 
  46.          public   byte  BlendFlags; 
  47.          public   byte  SourceConstantAlpha; 
  48.          public   byte  AlphaFormat; 
  49.     } 
  50.   
  51.   
  52.      public   const  Int32 ULW_COLORKEY  =   0x00000001 ; 
  53.      public   const  Int32 ULW_ALPHA  =   0x00000002 ; 
  54.      public   const  Int32 ULW_OPAQUE  =   0x00000004 ; 
  55.   
  56.      public   const   byte  AC_SRC_OVER  =   0x00 ; 
  57.      public   const   byte  AC_SRC_ALPHA  =   0x01 ; 
  58.   
  59.   
  60.     [DllImport( " user32.dll " , ExactSpelling  =   true , SetLastError  =   true )] 
  61.      public   static   extern  Bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst,  ref  Point pptDst,  ref  Size psize, IntPtr hdcSrc,  ref  Point pprSrc, Int32 crKey,  ref  BLENDFUNCTION pblend, Int32 dwFlags); 
  62.   
  63.     [DllImport( " user32.dll " , ExactSpelling  =   true , SetLastError  =   true )] 
  64.      public   static   extern  IntPtr GetDC(IntPtr hWnd); 
  65.   
  66.     [DllImport( " user32.dll " , ExactSpelling  =   true )] 
  67.      public   static   extern   int  ReleaseDC(IntPtr hWnd, IntPtr hDC); 
  68.   
  69.     [DllImport( " gdi32.dll " , ExactSpelling  =   true , SetLastError  =   true )] 
  70.      public   static   extern  IntPtr CreateCompatibleDC(IntPtr hDC); 
  71.   
  72.     [DllImport( " gdi32.dll " , ExactSpelling  =   true , SetLastError  =   true )] 
  73.      public   static   extern  Bool DeleteDC(IntPtr hdc); 
  74.   
  75.     [DllImport( " gdi32.dll " , ExactSpelling  =   true )] 
  76.      public   static   extern  IntPtr SelectObject(IntPtr hDC, IntPtr hObject); 
  77.   
  78.     [DllImport( " gdi32.dll " , ExactSpelling  =   true , SetLastError  =   true )] 
  79.      public   static   extern  Bool DeleteObject(IntPtr hObject); 
  80.   
  81.     [DllImport( " user32.dll " , EntryPoint  =   " SendMessage " )] 
  82.      public   static   extern   int  SendMessage( int  hWnd,  int  wMsg,  int  wParam,  int  lParam); 
  83.     [DllImport( " user32.dll " , EntryPoint  =   " ReleaseCapture " )] 
  84.   
  85.      public   static   extern   int  ReleaseCapture(); 
  86.      public   const   int  WM_SysCommand  =   0x0112 ; 
  87.      public   const   int  SC_MOVE  =   0xF012 ; 
  88.   
  89.      public   const   int  SC_MAXIMIZE  =   61488 ; 
  90.      public   const   int  SC_MINIMIZE  =   61472 ; 
  91. }  

需要呈現圖像的時候調用 SetBitmap 方法。只要優化好,呈現效率比普通的Paint重繪方式高很多,并且不卡不閃爍,支持任意透明。

下面是自己開發出來的效果:

 

這個是用OpenGL繪制的

 
責任編輯:王雪燕 來源: 博客園
相關推薦

2025-03-03 00:40:29

WinFormUI框架界面

2011-06-20 16:38:33

Qt QWidget Qt4.5

2022-02-11 16:01:14

C語言技巧命令

2016-01-18 10:14:44

jQuery相冊動畫

2022-07-21 07:05:13

粒子動畫CSS

2009-09-01 10:35:59

C# WinForm控

2009-09-07 03:58:42

WinForm傳值

2009-08-17 15:48:47

C# WinForm進

2024-07-03 08:21:56

MDI窗體界面

2017-07-18 16:00:09

炫酷動畫開源框架APP

2009-08-20 09:30:03

C#開發WinForm

2009-08-20 10:24:52

C#開發WinForm

2024-02-22 13:55:41

前端動畫庫

2009-08-20 10:10:55

C#透明窗體

2020-01-03 10:50:16

Python編程語言Mac電腦

2023-10-08 20:32:59

CSS定義Loading

2025-01-06 11:59:32

2024-05-29 05:00:00

2024-12-12 16:38:44

2009-09-07 06:48:13

C#透明窗體
點贊
收藏

51CTO技術棧公眾號

五月天婷婷在线观看| 国产人妻精品一区二区三区不卡| 亚洲国产福利| 国产亚洲成av人在线观看导航| 国产精品久久久久久久久久久新郎| 国产成人无码精品久久二区三| 羞羞视频在线观看一区二区| 亚洲成av人片在线| 香蕉久久免费影视| 精品黑人一区二区三区在线观看| 欧美亚洲视频| 精品中文字幕乱| 90岁老太婆乱淫| 欧洲精品99毛片免费高清观看| 午夜精品一区二区三区免费视频| 色就是色欧美| 五月婷婷久久久| 狠狠色丁香婷婷综合| 91成人在线视频| 人妻久久一区二区| 精品国产一区二区三区香蕉沈先生| 日韩一区二区三区视频在线观看| 国产精品亚洲a| 欧美人与牲禽动交com| 久久久久久亚洲综合影院红桃| 91九色蝌蚪成人| 中文字幕精品一区二区精| 亚洲精品欧洲| 久久99久国产精品黄毛片入口| 中文字幕黄色网址| 亚欧洲精品视频在线观看| 欧美成人a视频| 亚洲精品成人在线播放| 不卡亚洲精品| 91国内精品野花午夜精品| 黄色一级在线视频| 超黄网站在线观看| 一个色在线综合| 亚洲AV无码成人精品一区| av电影在线网| 亚洲国产电影在线观看| 免费在线成人av| 欧美日韩影视| 久久婷婷成人综合色| 国产一区不卡在线观看| 国产综合在线播放| 成人国产精品免费网站| 国产福利不卡| 人妻少妇精品无码专区| 丁香婷婷深情五月亚洲| 国产精品对白刺激久久久| 国产丰满美女做爰| 国产a区久久久| 国产v亚洲v天堂无码| 亚洲国产成人在线观看| 福利电影一区二区三区| 国产欧美亚洲日本| 男人天堂网在线视频| 成人精品视频.| 精品不卡在线| 欧美日韩影视| 国产亚洲精品超碰| 亚洲图色在线| 在线中文字幕电影| 亚洲一级在线观看| 国产免费黄色av| 日韩欧美一区二区三区免费观看| 在线中文字幕不卡| 中文字幕第17页| 久久精品九色| 亚洲精品福利在线| 亚洲天堂久久新| 日韩精品免费一区二区三区| 另类图片亚洲另类| 精品无码久久久久久久久| 日韩一级不卡| 国产精品久久久久国产a级| 中文字幕欧美人妻精品一区蜜臀| 久久国产精品免费| 成人资源视频网站免费| 青青草在线免费观看| 国产精品丝袜在线| 日韩精品久久一区二区| 免费电影日韩网站| 欧美日本视频在线| 中文字幕乱视频| 精品免费av| 欧美大片va欧美在线播放| 九九热国产视频| 日韩av电影免费观看高清完整版| 91在线观看免费高清完整版在线观看| 黄色www视频| 国产精品久久久久aaaa樱花 | 在线日韩电影| 热久久这里只有| 国产视频一区二区三区四区五区| 不卡av免费在线观看| 色一情一乱一伦一区二区三欧美 | 欧美性视频网站| 中文字幕永久免费视频| 不卡的电视剧免费网站有什么| 日本一区免费在线观看| 污污的网站在线免费观看| 色呦呦国产精品| 美女搡bbb又爽又猛又黄www| 成人3d精品动漫精品一二三| 欧美精品久久久久久久久久| 伊人精品一区二区三区| 久久综合九色综合97婷婷| 91精品国产毛片武则天| 伊人久久高清| 日韩精品丝袜在线| 欧美日韩精品在线观看视频| 日本伊人色综合网| 精品国产乱码久久久久久郑州公司 | 亚洲天堂网在线观看| 国产在线观看免费视频今夜| 久久国产精品区| 日本在线观看不卡| 2020日本在线视频中文字幕| 91精品国产综合久久久蜜臀图片 | 日本一区二区三区在线播放| 亚洲第一色网站| 亚洲视频在线观看三级| 麻豆一区二区三区视频| 亚洲人成网亚洲欧洲无码| 欧美激情中文字幕乱码免费| 国产口爆吞精一区二区| 国产精品久久久久影院老司| 成人午夜视频免费在线观看| 日韩av不卡一区| 97视频com| 免费国产羞羞网站视频| 亚洲精品国产精品乱码不99 | 无码人妻久久一区二区三区| 不卡的av网站| 久久久久久久中文| 国产精品欧美大片| 欧美激情精品久久久久久免费印度 | 媚黑女一区二区| 国产在线视频欧美一区二区三区| 国产精品久久麻豆| 欧美福利电影网| 911国产在线| 精品一区二区三区日韩| 影音欧美亚洲| 国产视频一区二| 久久影视电视剧免费网站| 在线观看国产精品视频| 国产精品伦一区| 在线看免费毛片| 亚洲精品va| 97netav| 中国av在线播放| 日韩精品中文字幕一区二区三区| 欧美日韩在线视频免费播放| 成人午夜视频免费看| 国产妇女馒头高清泬20p多| 一区二区三区视频免费视频观看网站| 久久国产精品久久久| 亚洲不卡免费视频| 午夜精品久久久久久久蜜桃app| 日本黄色录像片| 午夜一级在线看亚洲| 欧美一区二区三区在线播放| 国产精品传媒麻豆hd| 久热精品视频在线观看一区| 亚洲av无码乱码国产精品久久| 亚洲韩国精品一区| 亚洲精品视频免费在线观看| 欧美性色19p| 中文字幕的久久| 宅男av一区二区三区| 国产精品99久久免费| 久久久久久国产精品| 亚洲av成人精品一区二区三区在线播放| 欧美日韩中文字幕在线视频| 免费黄色片网站| 国内精品免费在线观看| 免费看黄在线看| 欧洲美女日日| 91精品国产高清久久久久久91裸体| 大黄网站在线观看| 亚洲网站在线看| av 一区二区三区| 欧美丝袜一区二区三区| 日本少妇aaa| 成人视屏免费看| www.天天射.com| 一区二区亚洲| 天堂资源在线亚洲视频| 天堂av一区| 国产精品草莓在线免费观看| 亚洲91av| 中文字幕久热精品在线视频| 亚洲国产精品suv| 欧美日韩三级一区| 久久久久亚洲av无码专区| 久久精品视频在线免费观看| 亚洲三级在线视频| 日韩福利视频导航| a级免费在线观看| 人人狠狠综合久久亚洲婷婷| 国产日韩一区欧美| 9999精品免费视频| 国产成人精品久久二区二区91| 1区2区3区在线视频| 一本色道久久综合狠狠躁篇的优点| 国产av无码专区亚洲av麻豆| 色哦色哦哦色天天综合| 日韩成人高清视频| 亚洲日本中文字幕区| 国产一二三四五区| 成人激情av网| 日本女人黄色片| 久久国产精品99久久久久久老狼| 日日摸日日碰夜夜爽无码| 亚洲精品91| 一区二区精品在线| 国产成人手机高清在线观看网站| 国产精品jizz视频| 精品国产伦一区二区三区观看说明| 日韩女在线观看| 蜜桃av.网站在线观看| 欧美黑人性视频| 超碰电影在线播放| 久久好看免费视频| av黄色在线观看| 一本色道久久88精品综合| 激情小说 在线视频| 日韩av网址在线观看| 高清一区二区三区四区| 日韩无一区二区| av片免费播放| 日韩女优av电影在线观看| 国产永久免费视频| 欧美人与性动xxxx| 91麻豆成人精品国产免费网站| 欧美中文字幕一区二区三区| 国产污视频网站| 色婷婷精品大视频在线蜜桃视频| 国产一区二区99| 欧美性高跟鞋xxxxhd| 亚洲一区欧美在线| 精品国产福利视频| 天堂中文在线网| 色综合一区二区三区| 青青青国产在线| 日本韩国欧美一区二区三区| 天天干天天操天天爱| 日本久久一区二区| 精品乱码一区内射人妻无码 | 色yeye香蕉凹凸一区二区av| 成年女人的天堂在线| 在线视频一区二区| 麻豆传媒视频在线观看| 美女啪啪无遮挡免费久久网站| av免费在线免费观看| 欧美第一黄色网| 阿v视频在线观看| 欧美一级片一区| 中文字幕系列一区| 成人精品一区二区三区| 久久99成人| 国产精品二区在线| 日韩理论电影中文字幕| 日本免费高清一区| 日韩大片在线观看| 18视频在线观看娇喘| 激情久久久久| 黄色av免费在线播放| 麻豆专区一区二区三区四区五区| 亚洲精品在线视频播放| 国产成人精品免费在线| 亚洲av无码一区二区三区网址| 久久精品夜色噜噜亚洲aⅴ| 免费在线观看a级片| 亚洲电影在线播放| 日韩乱码一区二区三区| 日韩一区二区三区四区| 久久久久久久久亚洲精品| 丝袜亚洲欧美日韩综合| 欧美xxxx少妇| 国产成人精品一区| 国产精品一区二区精品视频观看| 国产亚洲第一区| 欧美午夜精彩| 日韩精品综合在线| 日韩精品福利网| 亚洲天堂小视频| 国产日本欧洲亚洲| 久久久久久久久久久久久久免费看 | 国产又色又爽又黄的| 欧美丰满一区二区免费视频| 天堂中文在线看| 久久精品亚洲国产| 中文在线а√在线8| 亚洲综合最新在线| 精品在线观看入口| 400部精品国偷自产在线观看| 麻豆成人精品| 美女露出粉嫩尿囗让男人桶| 国产精品视频免费看| 成人午夜视频精品一区| 91精品国产色综合久久ai换脸| 日韩av资源站| 欧美黑人性生活视频| 青青青国产精品| 欧美污视频久久久| 极品日韩av| 日韩av加勒比| 国产精品麻豆99久久久久久| 亚洲黄网在线观看| 亚洲国产精品人人爽夜夜爽| 国产在线一区二区视频| 国产成人97精品免费看片| 国产乱人伦丫前精品视频| 欧美三级午夜理伦三级老人| 日韩不卡在线观看日韩不卡视频| 亚洲国产综合视频| 一区二区三区高清在线| 国产又黄又猛又爽| 深夜福利亚洲导航| 视频一区在线免费看| 欧美乱偷一区二区三区在线| 日韩午夜黄色| av av在线| 亚洲国产美国国产综合一区二区| 国产美女无遮挡永久免费| 中文字幕一区日韩电影| 日本高清不卡一区二区三区视频 | 欧美视频在线观看 亚洲欧| 粉嫩小泬无遮挡久久久久久| 欧美精品在线免费播放| 久久久久久久久成人| 精品91一区二区三区| 久久精品国产免费| 久久一级免费视频| 欧美日韩国产天堂| 95在线视频| 国产免费成人av| 久久激情电影| 第一区免费在线观看| 最新日韩在线视频| 国产伦一区二区| 欧美另类精品xxxx孕妇| 欧洲大片精品免费永久看nba| 999久久欧美人妻一区二区| 国产精品亚洲一区二区三区妖精| 日本青青草视频| 精品日韩欧美一区二区| 51av在线| 欧美一区激情视频在线观看| 日日夜夜精品视频免费| 日本不卡一区视频| 欧美日韩国产在线播放网站| 黄色在线播放网站| 91pron在线| 亚洲国产片色| 好吊视频在线观看| 欧美日韩免费一区二区三区视频| 麻豆av免费在线观看| 97超碰人人看人人 | 一区二区三区精品视频| 亚洲精品久久久久久无码色欲四季 | 裸体裸乳免费看| 成人性生交大片| 亚洲图片在线视频| 中文字幕一区电影| 亚洲精品一区二区三区在线| 欧美精品99久久| 国产精品女上位| 精品国产999久久久免费| 欧美极品少妇与黑人| 九九免费精品视频在线观看| 中文字幕第88页| 性做久久久久久免费观看欧美| 国产在线中文字幕| 91在线|亚洲| 亚洲在线成人| 超碰人人人人人人人| 精品欧美一区二区三区精品久久| 欧产日产国产精品视频 | 男人资源在线播放| 国产福利久久精品| 日本不卡123| 久久久综合久久| 国产一区二区三区视频在线观看 | 欧美国产二区| 久久99国产精品久久99| 日韩毛片在线视频| 日韩网站免费观看| 久久亚州av| 国产精品igao网网址不卡| 狠狠躁夜夜躁人人爽超碰91| 日韩在线观看www| 麻豆成人在线播放| 国产精品中文字幕日韩精品| 人人妻人人爽人人澡人人精品| 欧美日韩国产成人在线观看|