请问我想设置form1 只能在 mdiform1 窗体的右下角部分移动,请问怎么设置?
就是实现以下几点:
如果form1.left<=mdiform1.left+mdiform1.width/2 (就是向左移动靠到了中线)
那么 form1.left=mdiform1.left+mdiform1.width/2 (就是form1左边停止在中线上)
同样如果向上移动form1.top超过了mdiform1的高度的一半,
那么 form1.top=mdiform1.top+mdiform1.height/2 (顶端停在中线上)
如果向右移动,form1右端碰到了mdiform1的右端则不能再右移动,防止继续移动有部分子窗体不能看见
如果向下移动也一样,底端碰到了低端就不能再移动了!上面如果不够清楚请看下面形象一点的说明:
mdiform1 就象一个“田” 字 子窗体只能够在 “田”字的右下那一快移动,*子窗体不能有部分被mdi父窗体遮住!(就2个窗体)!
用api函数什么都好!请详细代码指点,若确实行得通,分全给他!
就是实现以下几点:
如果form1.left<=mdiform1.left+mdiform1.width/2 (就是向左移动靠到了中线)
那么 form1.left=mdiform1.left+mdiform1.width/2 (就是form1左边停止在中线上)
同样如果向上移动form1.top超过了mdiform1的高度的一半,
那么 form1.top=mdiform1.top+mdiform1.height/2 (顶端停在中线上)
如果向右移动,form1右端碰到了mdiform1的右端则不能再右移动,防止继续移动有部分子窗体不能看见
如果向下移动也一样,底端碰到了低端就不能再移动了!上面如果不够清楚请看下面形象一点的说明:
mdiform1 就象一个“田” 字 子窗体只能够在 “田”字的右下那一快移动,*子窗体不能有部分被mdi父窗体遮住!(就2个窗体)!
用api函数什么都好!请详细代码指点,若确实行得通,分全给他!
With Me
.WindowState = 2
End With
End SubForm1窗体代码(子窗体)Option Explicit
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
'移动窗体到右下角
Private Sub Command1_Click()
Dim lngP As Long
lngP = MoveWindow(Me.hwnd, (MDIForm1.ScaleWidth - Me.Width) / 15, (MDIForm1.ScaleHeight - Me.Height) / 15, Me.Width / 15, Me.Height / 15, True)
End Sub
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 LongDeclare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_MOVE = &H3
Public Oldproc As LongPublic Function Newproc(ByVal hwnd As Long, _
ByVal Msg As Long, ByVal wp As Long, _
ByVal lp As Long) As LongIf Msg = WM_MOVE Then '捕获窗体移动事件
Call sub_MoveForm1
End IfNewproc = CallWindowProc(Oldproc, hwnd, Msg, wp, lp)
End Function'Private Sub sub_MoveForm1()
'
' If Form1.Left + Form1.Width > MDIForm1.Width Then
' Form1.Left = MDIForm1.Width - Form1.Width
' End If
'
' If Form1.Top + Form1.Height > MDIForm1.Height Then
' Form1.Top = MDIForm1.Height - Form1.Height
' End If
'
' If Form1.Left < MDIForm1.Width / 2 Then
' Form1.Left = MDIForm1.Width / 2
' End If
'
' If Form1.Top < MDIForm1.Height / 2 Then
' Form1.Top = MDIForm1.Height / 2
' End If
'
'End SubPrivate Sub sub_MoveForm1()
'不加差值mdi窗体会自动加滚动条,太丑了
If Form1.Left + Form1.Width > MDIForm1.Width - 200 Then
Form1.Left = MDIForm1.Width - Form1.Width - 200
End If
If Form1.Top + Form1.Height > MDIForm1.Height - 580 Then
Form1.Top = MDIForm1.Height - Form1.Height - 580
End If
If Form1.Left < MDIForm1.Width / 2 Then
Form1.Left = MDIForm1.Width / 2
End If
If Form1.Top < MDIForm1.Height / 2 Then
Form1.Top = MDIForm1.Height / 2
End If
End Submdi窗体里Private Sub MDIForm_Load()
Me.WindowState = 2
Form1.Show
End Submdi子窗体里Private Sub form_load()
Me.Show
Me.Move MDIForm1.Width / 2, MDIForm1.Height / 2
Oldproc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Newproc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Form1.hwnd, GWL_WNDPROC, Oldproc
End Sub
中间位置修改一下,这样中间位置效果准确Private Sub sub_MoveForm1()
'不加差值mdi窗体会自动加滚动条,太丑了
If Form1.Left + Form1.Width > MDIForm1.Width - 200 Then
Form1.Left = MDIForm1.Width - Form1.Width - 200
End If
If Form1.Top + Form1.Height > MDIForm1.Height - 580 Then
Form1.Top = MDIForm1.Height - Form1.Height - 580
End If
If Form1.Left < (MDIForm1.Width - 200) / 2 Then
Form1.Left = (MDIForm1.Width - 200) / 2
End If
If Form1.Top < (MDIForm1.Height - 580) / 2 Then
Form1.Top = (MDIForm1.Height - 580) / 2
End If
End Sub