用SetParent之后,当从别的应用程序窗口切回我和程序需要点两次才可编缉?
我做了个程序有两个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 LongSetParent textbox 窗口 焦点 --------------------编程问答-------------------- 估计是第一次点击是到了父窗口,第二次才到了子窗口中的控件,所以需要点击2次,试下HOOK一下该窗口,发现点击事件就自动再增加一次点击,(sendmessage BM_CLICK ) 我也碰到过这种问题 --------------------编程问答-------------------- 我试了一下,发现可以点击呀,你打包整个工程RAR发我邮箱试下,1085992075@qq.com --------------------编程问答-------------------- 我这里确实不能输入,有可能是我描述得不太准确,要两个窗口都不是最大化的,也就是要同时能看到两个程序的窗口,当点了别的程序再回来点这个程序(注意是直接点输入框),第一下点完窗口的标题栏由灰蓝变成了亮蓝色(XP系统),但是光标不在输入框内闪,再点一下输入框才会看到一闪一闪的光标,这时才可输入字符 --------------------编程问答-------------------- 各位高人是不悄一顾吗?怎么无人问津啊? --------------------编程问答-------------------- 奇葩的设计就会有奇葩的问题。
Private Sub Form_Load()
SetParent ChildWin.ChildPicBox.hWnd, Me.FatherPicBox.hWnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload ChildWin
End Sub
非正常的应用超出了设计的规则,不能保证有100%的解决方案。
为什么不一开始就设计在父窗体中? --------------------编程问答-------------------- 这大概是VB Forms设计时,要维护ActiveControl的缘故,所以你实在要用SetParent这样的方式时,如果不愿子类化处理 消息,至少也要响应的下窗体的MouseDown事件处理一下。
这种需求,如果要用VB Forms的话,还是尽量搞成MDI或弄个用户控件什么的吧。
补充:VB , API