在MDI窗體調用子窗體時怎樣使不被MDI窗體上的圖片擋住

最近大家都在忙着敲機房收費系統,我也一樣。前幾天發現了一個問題,在點擊主窗體上的按鈕調用子窗體時,子窗體不顯示。開始時以爲是我把子窗體的名字敲錯了導致無法調用,後來在仔細覈對下排除了這種可能。那麼爲什麼和敲學生時一樣的步驟現在卻出現了這個問題呢?通過在網上查和問同學發現很多同學都遇到了這個問題,也有同學已經解決了。這裏就在來說說如何解決,權當強調了吧。
首先出現這個問題是因爲我們的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)
在MDI窗體調用子窗體時怎樣使不被MDI窗體上的圖片擋住 - 代曉霞 - 代曉霞 廊坊師範學院信息技術提高班十一期
瞭解了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是指窗口最大化顯示,用此可實現窗口標題欄右下角最小化、最大化按鈕點擊後的效果。

雖然這只是一個小小的知識點,但我相信可以積少成多厚積薄發。

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