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

怎么用EnumChildWindows枚举出父窗体内的所有子窗体句柄

2012-02-24 
如何用EnumChildWindows枚举出父窗体内的所有子窗体句柄!曾经想用FindWindow+GetWindow两API函数,对MDI子

如何用EnumChildWindows枚举出父窗体内的所有子窗体句柄!
曾经想用FindWindow   +   GetWindow两API函数,对MDI子窗口的枚举得到MDI子窗体内的所有的控件的句柄和类名,但程序实现了部分之后,发现句柄老是进入不到MDI的子窗体,只能获取到MDI父窗口的控件的句柄。故而,改变思路,想用EnumChildWindows函数实现该功能,可对这个函数不是很熟悉,向各位朋友讨教个EnumChildWindows函数的例程看看。谢谢!

[解决办法]
我的例程(需要回调函数,因此应该出现在模块里)(功能是查找指定类名和标题名的子窗体,楼主可以在此基础上变通)

Private Type WndClassInfo '自定义的窗口类数据结构
lHandle As Long '返回的窗体句柄
pSAName As Long
pSACaption As Long
End Type

'(程序段,使用时应放入相应的Sub/Function中)
Dim tClsInfo As WndClassInfo
Dim bClsName() As Byte, bClsCaption() As Byte
bClsName = "要查的类名 " '类名
bClsCaption = "要查的标题名 " '标题名
With tClsInfo
.lHandle = 0&
Call CopyMemory(.pSAName, ByVal VarPtrArray(bClsName), 4)
Call CopyMemory(.pSACaption, ByVal VarPtrArray(bClsCaption), 4)
End With
Call EnumChildWindows(hwnd, AddressOf EnumChildProc, VarPtr(tClsInfo))

Private Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim tClsInfo As WndClassInfo
Dim sTarName As String, sTarCaption As String '待查的目标类名及标题名
Dim bBuffer1() As Byte, bBuffer2() As Byte '数组,按字节存放字符串,用来克服 VB BSTR 跨函数调用的种种问题
Dim sBuffer1 As String, sBuffer2 As String '当前的类名及标题名

Call CopyMemory(tClsInfo, ByVal lParam, Len(tClsInfo))

sBuffer1 = String(64, Chr$(0))
sBuffer2 = String(64, Chr$(0))
sBuffer1 = Left$(sBuffer1, GetClassName(hwnd, sBuffer1, 63))
sBuffer2 = Left$(sBuffer2, GetWindowText(hwnd, sBuffer2, 63))

Call CopyMemory(ByVal VarPtrArray(bBuffer1), tClsInfo.pSAName, 4)
Call CopyMemory(ByVal VarPtrArray(bBuffer2), tClsInfo.pSACaption, 4)
sTarName = bBuffer1
sTarCaption = bBuffer2
Call CopyMemory(ByVal VarPtrArray(bBuffer1), 0&, 4)
Call CopyMemory(ByVal VarPtrArray(bBuffer2), 0&, 4)

If sTarCaption = " " And sBuffer1 = sTarName _
Or sBuffer1 = sTarName And sBuffer2 = sTarCaption Then
tClsInfo.lHandle = hwnd
Call CopyMemory(ByVal lParam, tClsInfo, Len(tClsInfo))
EnumChildProc = False
Else
EnumChildProc = True
End If
End Function

热点排行