再问“怎样获得MDI子窗口的叠放顺序”,特别请教Tiger_Zhao(VB老鸟)
我在
http://community.csdn.net/Expert/topic/5678/5678249.xml?temp=.8370478
提问的问题遇到了新情况,再次请教。
比如,如果 MDI 窗口有 3 个子窗口(按叠放次序从上到下排列)
1. DataReport 预览窗口,标题“打印预览 - 第一季度统计报告”
2. 普通的窗口, 标题“第一季度”
3. 普通的窗口, 标题“总览表”
用 Tiger_Zhao(VB老鸟) 的方法,则只得到:
第一季度
总览表
无视 DataReport 预览窗口。
试着把 EnumChildProc 中的判断
If frm.hwnd = hwnd Then
childForms.Add frm
End If
去掉,改成
childForms.Add frm
则得出的结果有很多重复,而且顺序也乱了。
请问,应该怎么办??
[解决办法]
DataReport与普通窗体不同,它的ClassName是 "ThunderDFrame ",而不是 "ThunderFromDC "
而且,它不在MDIForm的Forms集合中
如果你只有一个DataReport,糊弄一下可以这么改:
Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim frm As Form
Dim s As String
s = WindowClassName(hwnd)
If s = "ThunderFormDC " Then '
For Each frm In Forms
If frm.hwnd = hwnd Then
childForms.Add frm
End If
Next
ElseIf s = "ThunderDFrame " Then
childForms.Add DataReport1
End If
EnumChildProc = 1
End Function
Private Sub Command1_Click()
Dim childForms As Collection
Dim frm As Object '这里原来是Dim frm As Form
Set childForms = ListChildForms(MDIForm1)
For Each frm In childForms
Debug.Print frm.Caption
Next
End Sub
[解决办法]
查找 DataReport 按照 yachong(蚜虫) 用 "ThunderFromDC "。
DataReport的确不在 Forms 集合中,那么推荐定义一个全局集合 Reports,然后在每个 DataReport 中加入如下代码:
----------------------------------------
Private Sub ActiveReport_Initialize()
Reports.Add Me, "&H " & Hex(Me.hwnd)
End Sub
Private Sub ActiveReport_Terminate()
Reports.Remove "&H " & Hex(Me.hwnd)
End Sub
----------------------------------------
然后在 EnumChildProc 中对 "ThunderDFrame " 类用 Reports 进行查找