首先出現這個問題是因爲我們的MDI窗體上添加的Picture 控件。而並不是像我開始時想的是敲錯名字無法調用那樣,事實上我們的子窗體已經被調用了只是被Picture擋住了而已。原因已經找到了,那麼怎樣才能不讓Picture擋住子窗體呢。經過查找發現了這樣一句代碼: Public
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 可是這是什麼意思呢,原來這是一段在模塊裏聲明API函數的代碼,我們要聲明的就是SetParent函數。而SetParent這個API函數的功能就是該函數改變某個子窗口的父窗口。(詳見百度百科:http://baike.baidu.com/view/1080343.htm?fr=aladdin)。現整理如下表:
SetParent
函數原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent)
瞭解了SetParent函數後,我們言歸正傳來解決我們上面提到的問題。
首先在模塊中聲明SetParent函數:
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
其次在MDI窗體的菜單中單擊想要調用的子窗體,如圖:
點進入click事件後添加如下格式的代碼,即可。
(格式爲:SetParent 想要調用的子窗體名稱 .hWnd,MDI窗體名稱.hWnd)
添加了如上代碼後會發現又有問題了,那就是顯示的子窗體是一個和MDI主窗體一樣大的一個邊框,如下圖
只有把他往下拉一下纔可以看到就只是一個邊框,如果不注意的話就會找不到。而且要點擊最大化纔可以看全子窗體
解決方法:1.將每個子窗體的borderstyle = 1 即可。
2.. 我們可以通過添加代碼 Me.WindowState = 0
Me.Width = 數字
Me.Height= 數字
在將要調用的子窗體的maxbutton 和 minbutton設置成ture 即可(來根據自己的需要確定窗體大小)。
注:VB實現自身窗口最大化、最小化顯示,用Me.WindowState來實現。關於WindowState的幾種狀態:WindowState = 0指正常狀態,WindowState = 1是指窗口最小化,WindowState = 2是指窗口最大化顯示,用此可實現窗口標題欄右下角最小化、最大化按鈕點擊後的效果。
雖然這只是一個小小的知識點,但我相信可以積少成多厚積薄發。