如何控制MDI窗体的子窗体的初始化大小??

paullbm 2008-03-10 09:28:02
如题!!

我一直试着去改变子窗体的初始大小!哪怕在子窗体的form_load事件中,重新定义子窗体的大小.但还是无济于事....
请教各位大哥,应该如何控制!!!???

比如有个MDI窗体,还有一个子窗体A,在MDI界面中通过单击某一个菜单选项调出A来,但A的初始化大小并不是我想要的尽寸...
望各位大哥赐教!!!
...全文
159 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Sandrer 2008-03-11
(RcWithClient.xxx - RcWithClient.xxx) / 15
这里错了,应该是乘15才对。。。。
回复
Sandrer 2008-03-11
默认的MDI子窗体是客户区的一半大小(或者更多点)
你可以试试在每个子窗体中写改变大小的代码!
如果你怕重复打开子窗体时Left和Top值会不断增大,你可以设置子窗体的Left和Top值为0

Private Sub Form_Resize() '注:子窗体的事件,并不是MDI主窗体的
Move 0, 0, Width, Height
End Sub


而如果你不想子窗体出现在Left为0或者Top为0的地方,则可以在代码中先获取客户区的矩形范围,再进行子窗体的移动:

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long

Private Sub Form_Resize() '注:子窗体的事件,并不是MDI主窗体的
Dim RcWithClient As RECT
Dim hWndWithClient As Long
hWndWithClient = FindWindowEx(主窗体句柄, 0, "MDIClient", vbNullString)
If hWndWithClient Then
Call GetClientRect(hWndWithClient, RcWithClient)
'使子窗体在客户区里居中显示
Move ((RcWithClient.Right - RcWithClient.Left) / 15 - Width) / 2, _
((RcWithClient.Bottom - RcWithClient.Top) / 15 - Height) / 2, _
Width, Height
End If
End Sub



如果,你嫌在每个子窗体中添加这些代码麻烦的话,你可以在MDI主窗体中添加一个Timer控件
在Timer控件的Timer事件中增加下列代码进行判断,不过用Timer控件的话就不能做到实时显示了:

Private Sub Timer1_Timer()
Dim frm As Form
For Each frm In Forms
If frm.Name <> "MDI主窗体名称" Then
'这里写代码~~~~~~
'不过你可以判断一下子窗体的Left值和Top值,如果与你期望值相同的话就可以不用移动了
End If
Next frm
End Sub
回复
lqq7072000 2008-03-11
把子窗体的BorderStyle设置为1,窗体边框不能改变



Private Sub Form_Resize()
Me.Height = 5000
Me.Width = 5000
End Sub

这样好像还是不怎么灵活,顶啊!
回复
paullbm 2008-03-11
没有人知道了吗?
回复
bluefox1979 2008-03-10
自己写一个移动子窗体的方法
回复
paullbm 2008-03-10
但我希望子窗体一加载时都是同一个初始化...

改为:

但我希望子窗体的大小在一加载时都是同一个初始值...

-----------------------

我的目的就是,不窗打开多少个子窗体,我都希望他们的初始化大小一样,而且初始位置也一样!!!

修正为:

我的目的就是,不管打开多少个子窗体,我都希望他们的初始值大小一样,而且初始位置也一样!!!
回复
paullbm 2008-03-10
2楼的方法我试了...

达不到我想要的结果....

而且还有BUG....

如果是放在MDI的load事件中,那么,MDI一加载时就会同时出现子窗体....
并且还有一点是我不想看到的:就是当我不断的打开子窗体,不断的关闭子窗体的时候,子窗体的top值和left值都会不断加大.
虽然这是在MDI窗体中打开子窗体的一种特征,但我希望子窗体一加载时都是同一个初始化...
我的目的就是,不窗打开多少个子窗体,我都希望他们的初始化大小一样,而且初始位置也一样!!!
回复
XinJW 2008-03-10
可以的.
回复
paullbm 2008-03-10
可以解释一下吗???

还有,我的子窗体不止一个!!!

Form1.Move Form1.Left, Form1.Top, 6000, 6000
Form2.Move Form2.Left, Form2.Top, 6000, 6000
.
.
.
.
FormX.Move FormX.Left, FormX.Top, 6000, 6000


如果多个子窗体的话是这样吗?
回复
XinJW 2008-03-10
Private Sub MDIForm_Load()
Form1.Move Form1.Left, Form1.Top, 6000, 6000
End Sub

可以自己改一下,不知道你是不是要这个效果.
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-03-10 09:28
社区公告
暂无公告