我做了個程式有兩個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
uj5u.com熱心網友回復:
估計是第一次點擊是到了父視窗,第二次才到了子視窗中的控制元件,所以需要點擊2次,試下HOOK一下該視窗,發現點擊事件就自動再增加一次點擊,(sendmessage BM_CLICK ) 我也碰到過這種問題uj5u.com熱心網友回復:
我試了一下,發現可以點擊呀,你打包整個工程RAR發我郵箱試下,[email protected]uj5u.com熱心網友回復:
我這里確實不能輸入,有可能是我描述得不太準確,要兩個視窗都不是最大化的,也就是要同時能看到兩個程式的視窗,當點了別的程式再回來點這個程式(注意是直接點輸入框),第一下點完視窗的標題欄由灰藍變成了亮藍色(XP系統),但是游標不在輸入框內閃,再點一下輸入框才會看到一閃一閃的游標,這時才可輸入字符uj5u.com熱心網友回復:
各位高人是不悄一顧嗎?怎么無人問津啊?uj5u.com熱心網友回復:
奇葩的設計就會有奇葩的問題。非正常的應用超出了設計的規則,不能保證有100%的解決方案。
為什么不一開始就設計在父表單中?
uj5u.com熱心網友回復:
這大概是VB Forms設計時,要維護ActiveControl的緣故,所以你實在要用SetParent這樣的方式時,如果不愿子類化處理 訊息,至少也要回應的下表單的MouseDown事件處理一下。這種需求,如果要用VB Forms的話,還是盡量搞成MDI或弄個用戶控制元件什么的吧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/150662.html
標籤:API
