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

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值