【問題發現】
在我們寫好一個子窗體的代碼,想要運行檢查是否有bug的時候,我們會發現如果單純按照學生的代碼來,寫下下面的代碼,在屏幕上是看不見子窗體的。
Private Sub register_Click()
frmregister.Show
End Sub
但其實子窗體是顯示的了,只是它被父窗體的Picture控件給擋住了,也就是它顯示在了picture控件的後面,這是因爲picture控件和MDI子窗體是位於同一級上。
【解決辦法】
這個時候我們需要調用一個API函數來解決這個問題。
1.首先我們打開外接程序管理器,在外接程序管理器中找到VB6.0 API Viewer,勾選如圖所示的地方,點擊確定
2. 打開外接程序,點擊API瀏覽器,點擊右上角的文件,找到加載文本文件,點擊框起來的那個
3.找到SetParent這個函數,聲明範圍點擊公有,然後點擊複製,將聲明代碼複製到模塊中。
4.在每個子窗體的click事件中寫如下代碼即可
Private Sub register_Click()
SetParent frmregister.hWnd, Picture1.hWnd
frmregister.Show
End Sub
Private Sub add_Click()
SetParent frmcharge.hWnd, Picture1.hWnd
frmcharge.Show
End Sub
這是兩個窗體的,方便大家找規律。
【問題拓展】
在這個問題中我們用到了SetParent這個函數,那麼這個函數到底是啥啊,它有什麼作用呢?百科中說應用程序可以使用SetParent函數來設置彈出式窗口,層疊窗口或子窗口的父窗口。新的窗口與窗口必須屬於同一應用程序。該函數改變某個子窗口的父窗口。什麼意思呢?就是說我的MDI子窗體本來應該顯示在MDI父窗體前面,但是我這個時候因爲MDI父窗體前面還有一個picture控件,這個子窗體相當於被它們兩個夾住了,我們看不到子窗體,然後我們用SetParent這個函數給子窗體換一個父窗口,把它的父窗口換成Picture,這樣它就可以顯示在Picture控件之前了,我們就可以看到它了。