首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

再问“怎样获得MDI子窗口的叠放顺序”,特别请问Tiger_Zhao(VB老鸟)

2012-02-08 
再问“怎样获得MDI子窗口的叠放顺序”,特别请教Tiger_Zhao(VB老鸟)我在http://community.csdn.net/Expert/to

再问“怎样获得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 进行查找

热点排行