用SetParent之后,当从别的应用程序窗口切回我和程序需要点两次才可编缉?

曲阿子期 2013-07-16 03:11:12
我做了个程序有两个Form,FatherWin和ChildWin。FatherWin中包含一个PictureBox: FatherPicBox。ChildWin中包含ChildPicBox,而ChildPicBox中又放了一个TextBox1。如图:

我用SetParent ChildWin.ChildPicBox.hWnd, Me.FatherPicBox.hWnd 把ChildWin.ChildPicBox中的内容显示到FatherWin.FatherPicBox中,这时一切正常。可是当我鼠标去点一下别的任意软件窗口,然后再直接点这个窗口中的TextBox1却无法选中,光标停不到输入框内,必须再点一下才可输入字符。
各位高手有任良策?

ChildWin中无任何代码,FatherWin中代码如下:
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Form_Load()
SetParent ChildWin.ChildPicBox.hWnd, Me.FatherPicBox.hWnd

End Sub

Private Sub Form_Unload(Cancel As Integer)
Unload ChildWin
End Sub
...全文
576 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcrun 2013-07-23
  • 打赏
  • 举报
回复
这大概是VB Forms设计时,要维护ActiveControl的缘故,所以你实在要用SetParent这样的方式时,如果不愿子类化处理 消息,至少也要响应的下窗体的MouseDown事件处理一下。 这种需求,如果要用VB Forms的话,还是尽量搞成MDI或弄个用户控件什么的吧。
Tiger_Zhao 2013-07-23
  • 打赏
  • 举报
回复
奇葩的设计就会有奇葩的问题。
非正常的应用超出了设计的规则,不能保证有100%的解决方案。

为什么不一开始就设计在父窗体中?
曲阿子期 2013-07-23
  • 打赏
  • 举报
回复
各位高人是不悄一顾吗?怎么无人问津啊?
曲阿子期 2013-07-17
  • 打赏
  • 举报
回复
我这里确实不能输入,有可能是我描述得不太准确,要两个窗口都不是最大化的,也就是要同时能看到两个程序的窗口,当点了别的程序再回来点这个程序(注意是直接点输入框),第一下点完窗口的标题栏由灰蓝变成了亮蓝色(XP系统),但是光标不在输入框内闪,再点一下输入框才会看到一闪一闪的光标,这时才可输入字符
  • 打赏
  • 举报
回复
我试了一下,发现可以点击呀,你打包整个工程RAR发我邮箱试下,1085992075@qq.com
  • 打赏
  • 举报
回复
估计是第一次点击是到了父窗口,第二次才到了子窗口中的控件,所以需要点击2次,试下HOOK一下该窗口,发现点击事件就自动再增加一次点击,(sendmessage BM_CLICK ) 我也碰到过这种问题

1,486

社区成员

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

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