天天看點

機房收費-----使子窗體顯示父窗體的picture控件上首先為什麼MDI子窗體顯示不出來解決方法SetParent函數解釋

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