机房收费-----使子窗体显示父窗体的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较全面的文章,欢迎转步:点这里

机房收费-----使子窗体显示父窗体的picture控件上机房收费-----使子窗体显示父窗体的picture控件上 刘苗 发布了40 篇原创文章 · 获赞 5 · 访问量 5302 私信 关注
上一篇:06Junit单元测试学习笔记


下一篇:c#-在Windows窗体中调用公共方法