精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人在线短视频| 久久精品国产精品国产精品污| 波多野结衣一二三四区| 久久精品超碰| 亚洲另类一区二区| 久久精品一二三区| 一区二区美女视频| 在线成人国产| 色综合亚洲精品激情狠狠| 日本一区二区三区在线免费观看| 黄色激情在线播放| 国产日韩三级在线| 岛国一区二区三区高清视频| 欧美brazzers| 91精品精品| 亚洲欧美成人在线| 亚洲天堂小视频| 写真福利精品福利在线观看| 一区二区三区高清不卡| 欧美一区免费视频| 亚洲第一免费视频| 美女www一区二区| 性欧美视频videos6一9| 91香蕉视频污在线观看| 亚洲激情77| 日韩一级视频免费观看在线| 噼里啪啦国语在线观看免费版高清版| 美女精品导航| 亚洲日本丝袜连裤袜办公室| 日韩电影天堂视频一区二区| 亚洲精品一区二区三区蜜桃| 久久电影国产免费久久电影| 日本成人免费在线| 日韩精品久久久久久久| 午夜日韩在线| 久久夜精品香蕉| 黄免费在线观看| 清纯唯美亚洲经典中文字幕| 日韩欧美国产精品| 日韩成人av免费| 岛国精品在线| 欧美这里有精品| 欧美女人性生活视频| brazzers在线观看| 亚洲综合久久久久| a级片一区二区| 嫩草香蕉在线91一二三区| 国产日韩欧美亚洲| 欧美在线一区二区三区四区| 日本午夜在线| 2023国产精品视频| 蜜桃日韩视频| 女人天堂在线| 久久亚洲精华国产精华液| 精品国产一区二区三区麻豆小说| 亚洲欧美激情另类| 成人h动漫精品一区二区| 国产不卡一区二区三区在线观看| av中文字幕在线免费观看| 精品在线观看免费| 91久久精品国产91久久性色| 999精品国产| 国产成人精品一区二区三区四区 | 国产精品天天看| 视频在线精品一区| 日本黄色片在线观看| 综合久久久久综合| 日本大胆人体视频| 成人免费高清观看| 狠狠操狠狠色综合网| 蜜臀久久99精品久久久酒店新书 | 成人免费在线网址| 国产精品一级二级| 国产在线国偷精品产拍免费yy| 91久久精品视频| 丰满肉肉bbwwbbww| 91网站在线播放| 日韩精品第一页| 美女av在线播放| 亚洲综合999| 欧美深夜福利视频| 国产 日韩 欧美一区| 欧美日韩中文字幕精品| 手机av在线网站| 激情av综合| 亚洲天堂av高清| 日本一二三区在线观看| 尤物精品在线| 国产精品久久一区| 伊人精品在线视频| 国产69精品久久久久777| 蜜桃传媒视频麻豆第一区免费观看| 国产三区四区在线观看| 亚洲乱码国产乱码精品精的特点 | 日韩在线视频免费观看| 免费在线观看亚洲| 久久久成人网| 亚洲一区二区在线播放| 欧美午夜黄色| 亚洲男人的天堂网| 精品久久久久久久免费人妻| 91麻豆精品一二三区在线| 亚洲大胆人体在线| 欧美波霸videosex极品| 好看的av在线不卡观看| 国产精品久久久久999| 国产黄色一区二区| 欧美国产一区在线| 少妇高潮毛片色欲ava片| 国产成人福利夜色影视| 日韩大陆毛片av| 三级av在线免费观看| 免费欧美日韩| 国产精品国产亚洲精品看不卡15| 2021av在线| 精品久久中文字幕| 丰满人妻一区二区三区53视频| 国产精品亚洲人成在99www| 欧美大秀在线观看| 亚洲一区二区视频在线播放| 99re亚洲国产精品| 四虎精品欧美一区二区免费| 欧美成人资源| 亚洲精品久久久久久下一站| 欧美精品乱码视频一二专区| 美女网站视频久久| 日本成人三级| 免费看男女www网站入口在线| 欧美成人a∨高清免费观看| 懂色av蜜臀av粉嫩av永久| 久久久国产亚洲精品| 久久国产一区| www.综合网.com| 日韩久久久精品| 一区二区国产精品精华液| 免费成人在线网站| 五月天综合网| 芒果视频成人app| 日韩精品视频在线免费观看| 久久精品国产亚洲AV无码麻豆| 国产麻豆一精品一av一免费| 中文字幕制服丝袜在线| 欧洲精品久久久久毛片完整版| 一本一本久久a久久精品牛牛影视| 午夜婷婷在线观看| 91欧美一区二区| 欧美网站免费观看| 秋霞蜜臀av久久电影网免费| 97热在线精品视频在线观看| 少妇av在线播放| 亚洲成人你懂的| 免费黄色三级网站| 9国产精品视频| 久久99精品久久久久久秒播放器| 国产资源在线观看入口av| 亚洲国产又黄又爽女人高潮的| 在线观看免费国产视频| 91在线一区二区| 一女被多男玩喷潮视频| 免费成人结看片| 国产成人在线视频| 日本中文字幕电影在线免费观看 | 交换做爰国语对白| 欧美国内亚洲| 国产视频99| 伊伊综合在线| 中文字幕日韩av综合精品| 在线视频播放大全| 亚洲精品一二三| 精品人妻一区二区三区日产| 国产精品亚洲综合久久| 日本一区二区三区免费看| 国外成人福利视频| 欧美另类极品videosbestfree| 六月婷婷综合网| 色综合欧美在线视频区| 99精品中文字幕| 国产精品18久久久久久vr| 国产九色porny| 精品成人影院| 91免费看网站| 精品国产免费人成网站| 精品国偷自产在线视频99| 成 人 免费 黄 色| 色综合天天天天做夜夜夜夜做| 91精品久久久久久久久久久久| 国产麻豆视频一区二区| 国产精品动漫网站| 亚洲精品a级片| 久久精品久久精品国产大片| 欧美久久久网站| 欧美成人在线影院| 黄色一级片免费在线观看| 亚洲精品二区三区| 狠狠色噜噜狠狠色综合久| 日韩美女在线看免费观看| 久久在线免费观看视频| 特黄视频在线观看| 欧美日韩在线播放三区四区| 国产一级做a爰片在线看免费| 国产高清在线a视频大全| 欧美日韩免费观看一区二区三区| 免费毛片在线播放免费| 久久久久久免费毛片精品| 亚洲精品国产一区二区三区| 亚洲免费网址| 天堂а√在线中文在线| 精品久久91| 国产伦精品一区二区三区照片91 | 午夜欧美一区二区三区在线播放| www色com| 99久久99久久精品免费观看 | 先锋影音网一区二区| 91精品国产乱码久久久久久久久| 欧美边添边摸边做边爱免费| 日韩精品在线播放| 国产黄色美女视频| 欧美日韩mp4| 黄色av一级片| 精品国产成人在线| 免费麻豆国产一区二区三区四区| 国产精品网站一区| 91网站免费视频| heyzo一本久久综合| 黄色片子免费看| 精品一区二区三区免费观看| 日韩精品一区二区三区不卡| 国产精品豆花视频| 美女黄色片网站| 99re6这里只有精品| 欧美亚洲国产免费| 天海翼亚洲一区二区三区| 国产精品一区二区三区四区五区 | 欧美一级视频免费观看| 亚洲综合色在线| 紧身裙女教师波多野结衣| 中文字幕第一页久久| 亚洲一区二区自偷自拍 | 日韩精品专区在线影院重磅| 亚洲一级特黄毛片| 欧美三级电影在线看| 亚洲午夜无码久久久久| 色哦色哦哦色天天综合| 美女又爽又黄免费视频| 色综合久久中文综合久久牛| 国产欧美日韩另类| 婷婷激情综合网| 在线观看亚洲欧美| 精品久久久国产| 国产精品男女视频| 色综合中文字幕| 波多野结衣电影在线播放| 91福利小视频| 少妇无套内谢久久久久| 欧美午夜一区二区| 一区二区三区精彩视频| 51精品国自产在线| 精品人妻无码一区二区| 欧美一级艳片视频免费观看| 99久久精品国产色欲| 日韩免费高清视频| 黄色片一区二区三区| 精品国精品国产| 香蕉av一区二区三区| 亚洲人成电影网站色…| 岛国大片在线观看| 久久精品国产欧美亚洲人人爽| 91在线中字| 26uuu另类亚洲欧美日本老年| 国产超碰精品| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 精品人伦一区二区色婷婷| 精品成人免费视频| 欧美性xxxx极品hd满灌| 国产精品第6页| 日韩视频永久免费| 香蕉av在线播放| 在线精品国产欧美| 成人福利在线观看视频| 97超碰色婷婷| 欧美黄页在线免费观看| 国产精品一国产精品最新章节| 亚洲黄页网站| 91社在线播放| 性欧美xxxx大乳国产app| 视色视频在线观看| 成人午夜激情在线| 免费成人深夜天涯网站| 亚洲成人黄色影院| 亚洲午夜在线播放| 亚洲第一在线视频| 77导航福利在线| 国内精品久久久久久| 高清在线一区| 岛国视频一区| 外国成人免费视频| 浮妇高潮喷白浆视频| 久久av资源站| 亚洲成人日韩在线| 亚洲欧美另类图片小说| 国产91精品一区| 精品欧美乱码久久久久久| 国产福利第一视频在线播放| 欧美激情综合色综合啪啪五月| 亚洲一区二区三区四区| 国产经品一区二区| 色999日韩| 成人综合视频在线| 国产精品99久久久久久有的能看| 久久久久久久久久久久| 一区二区三区免费看视频| 真实新婚偷拍xxxxx| 亚洲高清av在线| а√资源新版在线天堂| 国产精品久久久久久久电影| 国产欧美啪啪| 中文字幕日韩精品无码内射| 免费看欧美美女黄的网站| 真人bbbbbbbbb毛片| 一区二区国产视频| 国产又粗又大又爽| 在线看欧美日韩| 三上悠亚国产精品一区二区三区| 国产经典一区二区三区 | 成人免费性视频| 精久久久久久久久久久| 男人的天堂av网| 色综合一区二区| 手机福利在线| 97免费在线视频| 国产精品男女| 成人免费a级片| 国产99精品视频| 91porn在线视频| 日韩色视频在线观看| 国产欧美黑人| 91网在线免费观看| 我不卡伦不卡影院| 国产探花在线观看视频| 18涩涩午夜精品.www| 91精品中文字幕| 久久精品国产精品亚洲| 国产95亚洲| 91传媒免费视频| 国产成人精品一区二| 国产一级大片在线观看| 欧美精品一区二| 爱啪啪综合导航| 欧美极品日韩| 石原莉奈一区二区三区在线观看| 中文字幕国产综合| 91激情在线视频| 在线视频91p| 91精品中文在线| 一区二区日韩欧美| 亚洲精品鲁一鲁一区二区三区 | 在线免费观看视频网站| 中文在线资源观看视频网站免费不卡| 日本精品裸体写真集在线观看| 日韩亚洲不卡在线| 美女视频一区在线观看| 国产免费久久久久| 亚洲第一页在线| 婷婷综合六月| 亚洲毛片aa| 国产传媒久久文化传媒| 久久精品欧美一区二区| 精品在线小视频| 成人毛片免费| 中文字幕在线中文| 99久久综合狠狠综合久久| 黄色一级视频免费看| 深夜福利亚洲导航| 亚洲高清999| 欧美二区在线视频| 国产区在线观看成人精品| 国产又粗又猛又黄| 欧美精品久久久久久久久| 婷婷亚洲精品| 天天影视色综合| 亚洲一级电影视频| 黄色在线免费观看大全| 3d动漫精品啪啪一区二区三区免费 | 亚洲人体在线| 国产日韩av网站| 欧美激情一区二区三区在线| 国产成人三级在线播放| 欧美亚洲第一页| 国产精品成久久久久| 中文字幕天堂av| 欧美午夜不卡视频| 色图在线观看| 午夜老司机精品| 播五月开心婷婷综合| 这里只有精品9| 97在线视频免费看| 天天av综合| 91久久免费视频| 欧美mv和日韩mv国产网站| 亚洲电影有码|