程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# Vista下將Area效果應用到整個窗體

C# Vista下將Area效果應用到整個窗體

編輯:C#入門知識

Vista下將Area效果應用到整個窗體
 
最近在找其它資源時,無意間發現了一個程序可以將Area效果應用到整個窗體。感覺挺有意思,看了一下代碼還是挺簡單的。


首先需要兩個API,DwmIsCompositionEnabled和DwmExtendFrameIntoClientArea。
DwmIsCompositionEnabled是用來判斷系統是否開啟了Area效果,當為False時為沒有開啟,這時有兩種情況一個是系統不支持,另外一種是用戶手動關閉了效果。如果是用戶手動關閉的,你仍然可以使你的程序具有Area效果。否則是不可以的。
DwmExtendFrameIntoClientArea是用來使你的窗體具有Area效果,可以是整個窗體,也可以是窗體的一部分。這個函數的第一個參數是需要應用Area效果窗體的Handle,第二個參數是一個MARGINS結構可以指定在窗體的什麼部位應用Area效果,如果是全部可以設置為-1,如果取消Area效果可以設置為0。
下面看一下這兩個API的聲明。
1         [DllImport("dwmapi.dll", PreserveSig =false)]
2        staticexternvoid DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
3
4         [DllImport("dwmapi.dll", PreserveSig =false)]
5        staticexternbool DwmIsCompositionEnabled();
下面就是實現的代碼了。
設置Area效果
1        publicstaticbool Enable(Window window)
2        {
3            try
4            {
5                if (!DwmIsCompositionEnabled())
6                    returnfalse;
7
8                 IntPtr hwnd =new WindowInteropHelper(window).Handle;
9                if (hwnd == IntPtr.Zero)
10                    thrownew InvalidOperationException("The Window must be shown before extending glass.");
11
12                // Set the background to transparent from both the WPF and Win32 perspectives
13                 window.Background = System.Windows.Media.Brushes.Transparent;
14                 HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;
15
16                 MARGINS margins =new MARGINS(-1);
17                 DwmExtendFrameIntoClientArea(hwnd, ref margins);
18                returntrue;
19             }
20            catch (Exception ex)
21            {
22                // could not change glass, but continue                  
23                 System.Diagnostics.Debug.WriteLine(ex.Message);
24                returnfalse;
25             }
26         }
取消Area效果
1        publicstaticbool Disable(Window window)
2        {
3            try
4            {
5                if (!DwmIsCompositionEnabled())
6                    returnfalse;
7
8                 IntPtr hwnd =new WindowInteropHelper(window).Handle;
9                if (hwnd == IntPtr.Zero)
10                    thrownew InvalidOperationException("The Window must be shown before extending glass.");
11
12                // Set the background to transparent from both the WPF and Win32 perspectives
13                 window.Background =new SolidColorBrush(System.Windows.SystemColors.WindowColor);
14                 HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = System.Windows.SystemColors.WindowColor;
15
16                 MARGINS margins =new MARGINS(0);
17                 DwmExtendFrameIntoClientArea(hwnd, ref margins);
18                returntrue;
19             }
20            catch (Exception ex)
21            {
22                // could not change glass, but continue                  
23                 System.Diagnostics.Debug.WriteLine(ex.Message);
24                returnfalse;
25             }
26         }

 

 
作者“梨園那出戲”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved