WPF技巧大全:[2]Aero Glass 效果

2025-11-04 05:37:46

1、打开VS,新建“WPF应用程序”项目,VB.NET/C#均可,VS12起C++也可以。

(本例用的是VB.NET,马上就会更新C#版)

WPF技巧大全:[2]Aero Glass 效果

2、 创建一个类AeroGlassHelper,用于协助将Aero Glass扩展到窗口中。

3、添加以下API声明,其中Margins是一个辅助结构,待会会定义。

WPF技巧大全:[2]Aero Glass 效果

4、创建扩展Aero Glass的函数

WPF技巧大全:[2]Aero Glass 效果

5、创建辅助结构,至此用来扩展的对象已经写完。

WPF技巧大全:[2]Aero Glass 效果

6、下面创建一个继承自Window的类ExtendAeroGlassWindow,

分别写初始化过程、创建WinProc消息处理函数(WPF没有该函数)以及获取或设置窗口各边要扩展Aero Glass的宽度的属性。

 Public Class ExtendAeroGlassWindow

        Inherits System.Windows.Window

        Private Const WM_DWMCOMPOSITIONCHANGED As Integer = &H31E

        Protected Overrides Sub OnSourceInitialized(e As EventArgs)

            MyBase.OnSourceInitialized(e)

            Try

                AeroGlassHelper.ExtendGlassFrame(Me, ExtendGlassFrameWidth)

                Dim h As New WindowInteropHelper(Me)

                Dim hwnd = h.Handle

                HwndSource.FromHwnd(hwnd).AddHook(New HwndSourceHook(AddressOf WndProc))

            Catch ex As Exception

            End Try

        End Sub

        Private Function WndProc(hwnd As IntPtr, msg As Integer, wParam As IntPtr,

                            lParam As IntPtr, ByRef handled As Boolean) As IntPtr

            If msg = WM_DWMCOMPOSITIONCHANGED Then

                Try

                    AeroGlassHelper.ExtendGlassFrame(Me, ExtendGlassFrameWidth)

                    handled = True

                Catch ex As Exception

                End Try

            End If

            Return IntPtr.Zero

        End Function

        Protected Friend _ExtendGlassFrameWidth As Thickness = New Thickness(-1)

        ''' <summary>

        ''' 获取或设置窗口各边要扩展Aero Glass的宽度。

        ''' </summary>

        ''' <value></value>

        ''' <returns>

        ''' 一个Thickness对象,描述窗体周围框架的粗细。

        ''' </returns>

        ''' <remarks></remarks>

        Public Property ExtendGlassFrameWidth() As Thickness

            Get

                Return _ExtendGlassFrameWidth

            End Get

            Set(value As Thickness)

                Try

                    AeroGlassHelper.ExtendGlassFrame(Me, value)

                Catch ex As Exception

                    Exit Property

                End Try

                _ExtendGlassFrameWidth = value

            End Set

        End Property

    End Class

7、大功告成!以后XAML定义的窗体就从ExtendAeroGlassWindow而不是Window创建。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢