请教GetParent的问题

一如既往哈 2011-01-11 08:29:18
各位大侠,晚上好:现遇到一个GetParent的初级问题。


新建一个工程,2个form:form1 和form2,在form1中有一个command1,点击后用SetParent将form2设为form1的子窗口,现在用getparent来获取form2的父窗口的hwnd,结果为什么是0???

Option Explicit
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Sub Command1_Click()
Load Form2
SetParent Form2.hwnd, Me.hwnd
Form2.Show
MsgBox GetParent(Form2.hwnd) '为何返回的结果是0而不是form1.hwnd?
End Sub

Private Sub Form_Load()
Me.Caption = Me.hwnd
End Sub
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
homezj 2011-01-12
  • 打赏
  • 举报
回复
没发现过你说的现象,可能与你其他部分的代码有关。
而且,你说“有时”发现,就更不好测试了。
一如既往哈 2011-01-11
  • 打赏
  • 举报
回复
谢谢楼上的解释。再多请教一个问题:

将自己的Form用setparent到一个指定的窗口后,做个试验:先隐藏父窗口,然后再显示父窗口,居然发现有时自己的form并没有显示出来,这是怎么回事??按道理来讲,只要父窗口可见,如果不单独设置子窗口的可见性,子窗口与父窗口的可见性应该是一致的呀!难道不是这样吗????
homezj 2011-01-11
  • 打赏
  • 举报
回复
这不算一个初级问题
由于兼容的原因,对于将改变父窗口的子窗口,SetParent函数并不改变该子窗口的WS_CHILD WS_POPUP风格。
而如果是一个顶级窗口(不是WS_CHILD)并且它没有拥有者(只对WS_POPUP而言),getparent返回值为NULL
说白了,就是SetParent后,你需要自己改变Style

7,789

社区成员

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

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