機房收費系統之"如何顯示子窗體“

【問題發現】

        在我們寫好一個子窗體的代碼,想要運行檢查是否有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控件之前了,我們就可以看到它了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章