VB多个窗体怎么同步移动位置?
本帖最后由 sdjnliuxu 于 2012-12-17 00:26:02 编辑 有3个窗体,Form1、Form2、Form3,设置固定位置打开
我是用按钮切换窗体的
比如窗体1里:
Private Sub Command1_Click()
Form2.Show
Unload Me
End Sub
问题是:3个窗体单独打开哪一个的时侯,如果移动了窗体,
点按钮再打开另一个窗体时,位置会自动回到设置的固定位置打开
而不是跟随前一个窗体的位置?
请问怎么设置才能3个窗体单独打开哪一个,在屏幕上移动位置后,
再打开其他窗体时,位置保持移动后的位置,而不是原来窗体设定的位置??
我是新学的VB,请高手们一定帮帮忙!多谢啦!!
[解决办法]
窗体关闭时,记录位置,计算出其他2个窗体的位置,下次打开任意一个窗体就移动到该位置。
此方法适用于运行中,如果退出程序再打开程序也要记录位置的,只有写入文件装载的时候再读取了……
[解决办法]
同意楼上,需要保存打开的最后一个窗体的位置,然后让新打开的窗体移动那个位置上去.
你可以在一个标准模块中定义两个变量,分别保存最后使用的窗体的TOP与LEFT:
'位于标准模块中
public lastTop as single,lastLeft as single
private sub formxx_unload(cancel as integer)
lasttop=me.top
lastleft=me.left
end sub
Private Sub Command1_Click()
load form2 '此时窗体不可见
form2.move lastleft,lasttop '移动位置
Form2.Show '使窗体可见
Unload Me
End Sub
'创建一个工程,包含Form1、Form2和一个标准模块,Form1是启动对象
'From1代码
Option Explicit
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
Form2.Show
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub
'标准模块代码
Option Explicit
Public Declare Function CallWindowProc Lib "user32 " Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_MOVE = &H3
Public Const WM_SIZE = &H5
Public prevWndProc As Long ' ' ' '默认窗口程序地址
Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ShowErr
'处理窗体移动的消息
If Msg = WM_MOVE Or Msg = WM_SIZE Then
Form2.Move Form1.Left, Form1.Top + Form1.Height
End If
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
Exit Function
ShowErr:
MsgBox Err.Source & "- " & Err.Description
End Function