多文檔界面窗體(MDI窗體)中的父窗體沒有辦法添加控件,我們可以在父窗體中添加一個picture控件,然後將控件放在picture上。但是隨之而來的問題就是MDI子窗體沒有辦法顯示出來,被picture控件給擋住了,經過翻閱各種資料,發現的了一些信息以及解決辦法。跟大家分享一下。
首先爲什麼MDI子窗體顯示不出來
因爲 MDI 程序中
子窗體實際上是位於 MDIClient 裏
就是說 子窗體的父窗體 是 MDIClient
而 放置在MDI中 的 picturebox 和MDIClient是同一級的
層次結構
ThunderMDIForm--MDIForm1
--MDIClient
----ThunderFormDC--Form1 子窗體1
----ThunderFormDC--Form2 子窗體2
--ThunderPictureBoxDC MDI中 的 picturebox
解決方法
1.在MDI父窗體中引用一個API函數即SetParen函數
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
2.在需要出現的窗體的單擊事件中輸入
SetParent FrmIntroduction.hWnd, PicMain.hWnd
FrmIntroduction.Show
舉個例子:
FrmIntroduction爲需要出現的子窗體, PicMain爲父窗體的picture控件名
Private Sub Introduction_Click()
SetParent FrmIntroduction.hWnd, PicMain.hWnd
FrmIntroduction.Show
End Sub
SetParent函數解釋
聲明方法:
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
功能:可以設置彈出式窗口,層疊窗口或子窗口的父窗口
函數原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent)
參數:hWndChild 子窗口句柄
hWndNewParent 新的父窗口句柄(如果該參數是NULL,則桌面窗口就成爲新的父窗口)
返回值:如果函數成功,返回值爲子窗口的原父窗口句柄;如果函數失敗,返回值爲NULL。若想獲得多錯誤信息,請調用GetLastError函數。
這裏有關於MDI窗體的部分介紹:請看這裏
由於上篇文章存在MFC的解釋,相應的我找到了關於MFC較全面的文章,歡迎轉步:點這裏