機房收費-----使子窗體顯示父窗體的picture控件上

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

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