如果按照vb里缺省的设置,每当程序每次启动的时候,窗体都会按照程序设计时指定的大小和位置出现。对于有的应用程序而言,让程序“记住”上次被执行时的大小和位置有助于提高用户友好的体验。为了实现这个目的,程序必须在结束的时候保存其大小和位置(信息),然后在它下次启动的时候利用这些信息。
Windows注册表是保存这些信息的最佳场所。下面的过程要从窗体的Unload事件过程调用,它会在注册表里保存窗体的位置(Left和Top性质)及其大小(Width和Height性质):
Public Sub SaveFormPosition(f As Form)
SaveSettingApp.EXEName, "Form Position", "Left", Str(f.Left)
SaveSettingApp.EXEName, "Form Position", "Top", Str(f.Top)
SaveSettingApp.EXEName, "Form Position", "Width", Str(f.Width)
SaveSettingApp.EXEName, "Form Position", "Height", Str(f.Height)
End Sub
当程序启动的时候恢复其大小和位置要稍稍多花一点工夫。程序第一次运行的时候,这一信息不会被放到注册表里,所以你必须要在自己的代码里顾及到这个事实。
你可以从窗体的Load事件过程里调用下面这个过程,以便恢复其位置。如果没有在注册表里找到所要的信息,GetSetting这个函数会返回一个空白的字符串。在这种情况下,过程就会退出,而窗体会以缺省的大小和位置显示。
Public Sub RestoreFormPosition(f As Form)
Dim buf As String
Dim l As Long, t As Long, w As Long, h As Long
buf = GetSetting(App.EXEName, "Form Position", "Left")
' If buf = "" then the settings were not saved perhaps because
' this is the first time the program was run. Exit the sub and
' let the form display at its default size and position.
If buf = "" Then Exit Sub
l = CLng(buf)
buf = GetSetting(App.EXEName, "Form Position", "Top")
t = CLng(buf)
buf = GetSetting(App.EXEName, "Form Position", "Width")
w = CLng(buf)
buf = GetSetting(App.EXEName, "Form Position", "Height")
h = CLng(buf)
f.Move l, t, w, h
End Sub
你的程序会调用窗体里Load和Unload事件过程的两个过程,这两个过程如下:
Private Sub Form_Load()
RestoreFormPosition Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveFormPosition Me
End Sub
这些过程只能用于程序的一个窗体。如果想要保存两个或者更多窗体的大小和位置,你就需要某种方式分别保存每个窗体的设置。你可以通过在注册表键里加入窗体的名称来达到这一目的,就像下面保存Left设置一样:
SaveSettingApp.EXEName, "Form Position", f.Name & "Left", Str(f.Left)
and here for retrieving the Left setting:
buf = GetSetting(App.EXEName, f.Name & "Form Position", "Left")