多文档界面窗体(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较全面的文章,欢迎转步:点这里
刘苗 发布了40 篇原创文章 · 获赞 5 · 访问量 5302 私信 关注