这是vb的bug吗?使用SetParent函数产生的奇怪现象。

chendjin 2006-10-23 02:31:45
准备:一个工程中2个窗体form1、form2
Form1中添加Command1和图片控件Picture1,它作为Form2的容器,大小可以容纳Form2为宜。
Form2中胡乱添加几个可参照定位(视觉上)的控件

Form1中通用声明:
Dim frmOld As Form
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

试验:将Form2指定给Form1的Picture1。
让如下代码
Set frmOld = Form2
SetParent frmOld.hWnd, Picture1.hWnd
frmOld.Show
在调试状态下,分别粘贴在Form_Load和Command1_Click中多次尝试,发现:
(1)连续从Form_Load中执行时,Form2在Picture1的位置承阶梯右下移动,移动几次后回到最初位置。
(2)连续单击Command1时,Form2在Picture1的位置固定不变。
这是咋回事,请高手解答一下,谢谢。
...全文
373 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy_sea 2006-10-23
  • 打赏
  • 举报
回复
这不很正常吗!
谁规定每次都得在同一位置了?
运行下面的代码,每次Form2的实例位置也都不一样啊!
Private Sub Command1_Click()
Dim frm As Form2
Set frm = New Form2
frm.Show
End Sub
你要想让它每次都出现在同一位置,加上下面的代码不就行了?
Private Sub Form_Load()
Me.Move 0, 0
End Sub
chendjin 2006-10-23
  • 打赏
  • 举报
回复
你这个是说关闭了以后重新运行,又关闭又重新运行吗?
是这个意思!注意的是form每次屏幕居中,只是form2会在Picture1移动,而不是form1移动了,form2视觉上也跟随移动了。不知你是否这个意思。
pigsanddogs 2006-10-23
  • 打赏
  • 举报
回复
在调试状态下,分别粘贴在Form_Load和Command1_Click中多次尝试,发现:
(1)连续从Form_Load中执行时,Form2在Picture1的位置承阶梯右下移动,移动几次后回到最初位置。

你这个是说关闭了以后重新运行,又关闭又重新运行吗?
如果你一个form创建出来了没有指定位置, 那么他的位置是随机出现在屏幕上的,
一般系统会每次创建form的时候都给form的x,y坐标增加一个值,
目的是连续创建多个form的时候,层次排列“特别漂亮”, 如果x,y到达某个值又回回去
这时候你用了SetParent, 那么这个x,y的坐标也跟随着保留下来了相对于Picture1.hWnd
的偏移量了。




(2)连续单击Command1时,Form2在Picture1的位置固定不变。
因为这个form2已经创建出来了, 那么他的坐标就已经固定了,
你再怎么 setparent都没用, 因为他本来就属于那个picture。




chendjin 2006-10-23
  • 打赏
  • 举报
回复
我的确实没有移动啊!!!更奇怪了!!
ZOU_SEAFARER 2006-10-23
  • 打赏
  • 举报
回复
代码都在上面,还有什么不同呢,很奇怪哦
chendjin 2006-10-23
  • 打赏
  • 举报
回复
ZOU_SEAFARER(国际海员^_^) :
我的没有移动啊!!!是哪里参数设置不同吗?
feiyun0112 2006-10-23
  • 打赏
  • 举报
回复
设置Form2.startupposition

*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
ZOU_SEAFARER 2006-10-23
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Set frmOld = Form2
SetParent frmOld.hWnd, Picture1.hWnd
frmOld.Show

End Sub

Form2 的位置也在不断的运动的!和你说的1是一样效果
也许是按照窗体垂直方式排列出现的窗体!

1,488

社区成员

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

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