|
|
|
@@ -0,0 +1,74 @@
|
|
|
|
|
Public Class WindowStateIniBehavior
|
|
|
|
|
|
|
|
|
|
Private Shared ReadOnly IsReady As New Dictionary(Of Window, Boolean)
|
|
|
|
|
|
|
|
|
|
Public Shared Function GetPersistenceKey(obj As DependencyObject) As String
|
|
|
|
|
Return CStr(obj.GetValue(PersistenceKeyProperty))
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Public Shared Sub SetPersistenceKey(obj As DependencyObject, value As String)
|
|
|
|
|
obj.SetValue(PersistenceKeyProperty, value)
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Public Shared ReadOnly PersistenceKeyProperty As DependencyProperty =
|
|
|
|
|
DependencyProperty.RegisterAttached(
|
|
|
|
|
"PersistenceKey",
|
|
|
|
|
GetType(String),
|
|
|
|
|
GetType(WindowStateIniBehavior),
|
|
|
|
|
New PropertyMetadata(Nothing, AddressOf OnKeyChanged)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Private Shared Sub OnKeyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
|
|
|
|
|
Dim Window = TryCast(d, Window)
|
|
|
|
|
If IsNothing(Window) Then Return
|
|
|
|
|
|
|
|
|
|
IsReady(Window) = False
|
|
|
|
|
|
|
|
|
|
AddHandler Window.Loaded, Sub() LoadState(Window)
|
|
|
|
|
|
|
|
|
|
AddHandler Window.ContentRendered,
|
|
|
|
|
Sub()
|
|
|
|
|
IsReady(Window) = True
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
AddHandler Window.LocationChanged, Sub() SaveState(Window)
|
|
|
|
|
AddHandler Window.SizeChanged, Sub() SaveState(Window)
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Private Shared Sub SaveState(Window As Window)
|
|
|
|
|
If Not IsReady(Window) Then Return
|
|
|
|
|
|
|
|
|
|
EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_LEFT, Window.Left.ToString(), Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_TOP, Window.Top.ToString(), Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_WIDTH, Window.Width.ToString(), Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_HEIGHT, Window.Height.ToString(), Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Private Shared Sub LoadState(Window As Window)
|
|
|
|
|
Dim sLeft As String = String.Empty
|
|
|
|
|
Dim dLeft As Double = 0
|
|
|
|
|
EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_LEFT, String.Empty, sLeft, Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
If sLeft IsNot String.Empty Then StringToDouble(sLeft, dLeft)
|
|
|
|
|
|
|
|
|
|
Dim sTopD As String = String.Empty
|
|
|
|
|
Dim dTop As Double = 0.0
|
|
|
|
|
EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_TOP, String.Empty, sTopD, Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
If sTopD IsNot String.Empty Then StringToDouble(sTopD, dTop)
|
|
|
|
|
|
|
|
|
|
Dim sWidth As String = String.Empty
|
|
|
|
|
Dim dWidth As Double = 0.0
|
|
|
|
|
EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_WIDTH, String.Empty, sWidth, Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
If sWidth IsNot String.Empty Then StringToDouble(sWidth, dWidth)
|
|
|
|
|
|
|
|
|
|
Dim sHeight As String = String.Empty
|
|
|
|
|
Dim dHeight As Double = 0.0
|
|
|
|
|
EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_HEIGHT, String.Empty, sHeight, Map.refMainWindowVM.DimensionDir)
|
|
|
|
|
If sWidth IsNot String.Empty Then StringToDouble(sHeight, dHeight)
|
|
|
|
|
|
|
|
|
|
If dLeft > 0 Then Window.Left = dLeft
|
|
|
|
|
If dTop > 0 Then Window.Top = dTop
|
|
|
|
|
If dWidth > 0 Then Window.Width = dWidth
|
|
|
|
|
If dHeight > 0 Then Window.Height = dHeight
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
End Class
|