VB6:在第 3 方控件中获取子控件的 hWnd

Posted

技术标签:

【中文标题】VB6:在第 3 方控件中获取子控件的 hWnd【英文标题】:VB6: Get hWnd of a child control inside a 3rd Party control 【发布时间】:2011-08-01 14:28:09 【问题描述】:

我有一个 vb6 第三方 UpDown 控件(让它成为 ControlX),使用 UISpy 我可以看到 ControlX 内部有 2 个控件,一个是“ThunderRT6TextBox”,另一个是“UpDown20WndClass”。

我在 ControlX 周围画了一个边框。我正在使用 ControlX hWnd,我像这样绘制边框:

   hdc = BeginPaint(hwnd, tPS)

   GetClientRect hwnd, controlXRect

   DrawEdge hdc, controlXRect, BDR_SUNKENOUTER, BF_RECT

问题是边框是围绕着 ThunderRT6TextBox 而不是 UpDown20WndClass 绘制的(可能 ControlX hWnd 返回它的内部 ThunderRT6TextBox 控件 hwnd)。

我想获取 ControlX 的内部 UpDown20WndClass 控件 hWnd,在它周围画一个边框。

我该怎么做?

提前致谢。

【问题讨论】:

希望具有 UpDown20WndClass 的包装控件不是 Microsoft Forms 2.0 库的一部分。该库对其在 VB6 程序中的使用提出了警告,并且不能合法地重新分发,这实际上使其对大多数程序无用。 【参考方案1】:

如果 updown 控件已成为文本框的子控件,您应该可以使用 EnumChildWindows 找到它。您可以使用 WinSpy 来查看是否有一个包含文本框和 updown 的整体父 hwnd,然后为它枚举。

【讨论】:

您好,感谢您的建议,但不幸的是没有全父。【参考方案2】:

我在获取 ControlX hwnd 时返回“ThunderRT6TextBox”的 hwnd。要获得“UpDown20WndClass”hwnd,我需要它的父 hwnd(ControlX hwnd)。我将 GetParent 与“ThunderRT6TextBox”hwnd 一起使用,得到了公共父 hwnd,然后使用 FindWindowEx 我得到了“UpDown20WndClass”。

【讨论】:

以上是关于VB6:在第 3 方控件中获取子控件的 hWnd的主要内容,如果未能解决你的问题,请参考以下文章

在VB6中,设置FARPOINT SPREAD控件的哪个属性,以锁定显示的内容,不能修改显示的数据

获取控件属性VB6

delphi中的treeview控件如何取到选择节点的索引号?

为啥vb6.0 treeview控件添加的父节点可以显示,但是子节点显示不出来?急求答案

MFC中怎样获取指定窗口的句柄

vb6 webbrowser 如何判断当前网页中获取焦点的是否一个文本框?