多文檔界面窗體(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較全面的文章,歡迎轉步:點這裡