机房收费系统之"如何显示子窗体“

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/destinyzjy/article/details/100168559

【问题发现】

        在我们写好一个子窗体的代码,想要运行检查是否有bug的时候,我们会发现如果单纯按照学生的代码来,写下下面的代码,在屏幕上是看不见子窗体的。


Private Sub register_Click()
    frmregister.Show
End Sub

       但其实子窗体是显示的了,只是它被父窗体的Picture控件给挡住了,也就是它显示在了picture控件的后面,这是因为picture控件和MDI子窗体是位于同一级上。

【解决办法】

       这个时候我们需要调用一个API函数来解决这个问题。

1.首先我们打开外接程序管理器,在外接程序管理器中找到VB6.0 API Viewer,勾选如图所示的地方,点击确定

2. 打开外接程序,点击API浏览器,点击右上角的文件,找到加载文本文件,点击框起来的那个

3.找到SetParent这个函数,声明范围点击公有,然后点击复制,将声明代码复制到模块中。

4.在每个子窗体的click事件中写如下代码即可

Private Sub register_Click()
    SetParent frmregister.hWnd, Picture1.hWnd
    frmregister.Show
End Sub
Private Sub add_Click()
    SetParent frmcharge.hWnd, Picture1.hWnd
    frmcharge.Show
End Sub

这是两个窗体的,方便大家找规律。

【问题拓展】

        在这个问题中我们用到了SetParent这个函数,那么这个函数到底是啥啊,它有什么作用呢?百科中说应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口。新的窗口与窗口必须属于同一应用程序。该函数改变某个子窗口的父窗口。什么意思呢?就是说我的MDI子窗体本来应该显示在MDI父窗体前面,但是我这个时候因为MDI父窗体前面还有一个picture控件,这个子窗体相当于被它们两个夹住了,我们看不到子窗体,然后我们用SetParent这个函数给子窗体换一个父窗口,把它的父窗口换成Picture,这样它就可以显示在Picture控件之前了,我们就可以看到它了。

猜你喜欢

转载自blog.csdn.net/destinyzjy/article/details/100168559