我的那些子窗体如何在添加了图片框的父窗体中显示?

来源:互联网 发布:网络高清视频监控系统 编辑:程序博客网 时间:2024/06/03 02:12

做机房收费系统主界面用的是一个多文档窗体。主界面如下:

 

做好菜单栏后,发现多文档界面不允许添加标签和文本框之类的控件,只能够借助于picture box 作为载体来添加。但是这样那些子窗体显示的时候就会被图片框给覆盖。还有一种方法就是另外在增加一个子窗体来显示让图片框上的内容。但是考虑到用户,个人觉得还是一个窗体操作起来更直观,方便。

为了可以让我的那些子窗体在父窗体中显示,setparent 函数被找到了。
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  是父窗口句柄。

   具体使用:在模块中声明setparent函数。然后在要成为子窗体的窗体加载事件中写入:
Call SetParent(Me.hwnd, frmmain.Picmain.hwnd)
Me.WindowState = 2

 

这样子窗体就可以在父窗体中显示出来了。可能有的人的的子窗体显示出来了,可是使用不了,也就是说无法获得焦点。这个时候就要注意了。看看你的子窗体的MDIchild 属性是不是为false 。 不是的话改为默认的false,然后再试。

 

再看setparent 函数

这个函数其实是很有意思的。首先看名字:set——parent 。用编程语言字面理解应该是  安排——容器。具体点就是给一个窗体安排放置它的容器。所以A ,B 窗体之前是没有从属关系的。我们要想让A窗体放置到B窗体中无需先让A 成为B 子窗体。我们只需要使用上边的两行代码就可以了。


其次是参数:hwndchild  和hwndnewparent 不光指的是窗体,也可以是控件。当然这个hWndNewParent应该是一个容器控件。不知道大家有没有发现在这个例子中:我的父窗口句柄用的是:
frmmain.Picmain.hwnd。其实这是一个容器控件picturebox 的句柄。在这个系统中,我需要的就是把我的子窗体放到父窗体的的图片框中显示,所以父窗口句柄是:frmmain.picmain.hwnd。

再次看setparent 函数就有了这个额为的发现:给控件设置容器控件;

                                                                          给空间设置窗体;

                                                                          给窗体设置父窗体;

                                                                          还可以把窗体放到容器控件中。
怎么样?是不是发现这个setparent 函数的功能很多呢?

有一次感悟学习就是个“反复的过程。”一下子是不可能学会的。
原创粉丝点击