机房收费系统热火朝天的进行着,于此同时问题也是毫不留情的就来了,在MDI窗体中添加了picture控件后,子窗体不能显示就是我遇到的第一个问题。刚刚着手做系统遇到这样的问题,挺棘手的,当时在网上查过很多的资料,也没找到。今天在这里分享分享我解决这个问题的经验
经验一:这个办法用起来虽说子窗体显示了,但是我个人觉得有点偷懒。
子窗体不能显示出来,那是因为被picture控件给挡住了,那么怎么让它到前面来呢,我就想到了隐藏picture控件,于是在我需要显示其他窗体的时候,我就把picture隐藏,这样子窗体就出来了,然后在我关闭子窗体的时候,我在显示picture控件 。但这样做却有很多弊端,显示子窗体的时候,我就看不到主窗体上的内容了。于是我不得不找其他的办法 从根本上解决这个问题
经验二 :经过查找,我发现可以利用API函数来解决这个问题(结果是显而易见的,很有效)
所需要的API函数 :SetParen
具体做法:1. 首先我们要在相应的模块中声明这个函数,在VB6.0的API浏览器里面就可以找到这段声明的代码
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
2.写好声明后就是应用的部分了,当我们单机MDI窗体上的菜单想要显示另一个子窗体时,我们在单机菜单的Click 事件中
按如下格式:SetParent frmInquireStudent.hWnd,frmMain.hWnd (这里我以我自己的代码为例子)
3. 格式:setParent 你要显示的子窗体名称.hWnd, MDI窗体(即你的MDI窗体名称).hWnd
4. 按照上面的三个步骤写好后,子窗体是显示了,但是显示的是和MDI主窗体一样大的一个边框,只有点击最大化时,才能全看到,这时我们九需要改变一下窗体的大小,在加载窗体时,用相应的代码来确定子窗体的大小 例如:
Me.Width = 数字
Me.Height= 数字
具体数字就很据自己的需要设定了 ,这样窗体就可以显示了。
既看到了子窗体,又看到了主窗体上的内容 ,感觉真是不错 !
在此也顺便写一下 SetParent 这个API 函数的用法
SetParent是一个API函数,它的作用是为一个物体指定一个新的父窗体。(父窗体严格来说应该是容器).也就是把一个物体转到另一个物体上去
Setparent
语法是:
Setparent 物体句柄,目标句柄
发现问题并解决问题,听起来似乎很煎熬,但身在其中的我却感觉到这是个享受的过程。每天都能收获新的知识,我想这些也在慢慢的充实着我,改变着我,并且会带给我巨大的财富吧。