怎样获得 MDI 窗口中的子窗口的叠放顺序

Woodman007 2007-07-27 10:27:04
MDI 主窗口有很多子窗口,我想在主窗口的菜单栏中用一个下拉列表列出子窗口的叠放次序,比如:

窗口列表
1 ---- 子窗口1
2 ---- 子窗口2
3 ---- 子窗口3

表示“子窗口1”在最前,“子窗口2”在“子窗口1”的下面,“子窗口3”在“子窗口2”的下面。

MDI 窗口只有一个 ActiveForm 属性表示活动窗口,没有其他属性表示窗口的叠放顺序。

我想到的一个方法是: 建立一个队列,每当一个子窗口打开、关闭、变成活动窗口时,分别在 Form_Load、Form_Unload、Form_Activate 事件中加入改变队列的代码。不过这种方法的代码量太大,维护起来很不方便,请问有没有其他方法?

...全文
268 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yachong 2007-07-27
  • 打赏
  • 举报
回复
Tiger_Zhao(VB老鸟) 正解
学习了,收藏
Tiger_Zhao 2007-07-27
  • 打赏
  • 举报
回复
这是按叠放次序的方法:
Module 内
===================
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private childForms As Collection

Private Function WindowClassName(ByVal hwnd As Long) As String
Dim RetVal As Long, sClassName As String
sClassName = Space(256)
RetVal = GetClassName(hwnd, sClassName, 256)
WindowClassName = Left$(sClassName, RetVal)
End Function

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim frm As Form

If WindowClassName(hwnd) = "ThunderFormDC" Then '
For Each frm In Forms
If frm.hwnd = hwnd Then
childForms.Add frm
End If
Next
End If

EnumChildProc = 1
End Function

Public Function ListChildForms(ByVal MDIMain As MDIForm) As Collection
Set childForms = New Collection
EnumChildWindows MDIMain.hwnd, AddressOf EnumChildProc, ByVal 2&
Set ListChildForms = childForms
End Function

===================
主窗体内测试
===================
Private Sub mnuWindow_Click()
Dim childForms As Collection
Dim frm As Form
Set childForms = ListChildForms(Me)
For Each frm In childForms
Debug.Print frm.Caption
Next
End Sub
yachong 2007-07-27
  • 打赏
  • 举报
回复
试了试,不会,帮顶
Tiger_Zhao 2007-07-27
  • 打赏
  • 举报
回复
直接在菜单设计中将 "窗口列表" 菜单的 WindowList 属性勾上

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧