在MDI窗体调用子窗体时怎样使不被MDI窗体上的图片挡住

最近大家都在忙着敲机房收费系统,我也一样。前几天发现了一个问题,在点击主窗体上的按钮调用子窗体时,子窗体不显示。开始时以为是我把子窗体的名字敲错了导致无法调用,后来在仔细核对下排除了这种可能。那么为什么和敲学生时一样的步骤现在却出现了这个问题呢?通过在网上查和问同学发现很多同学都遇到了这个问题,也有同学已经解决了。这里就在来说说如何解决,权当强调了吧。
首先出现这个问题是因为我们的MDI窗体上添加的Picture 控件。而并不是像我开始时想的是敲错名字无法调用那样,事实上我们的子窗体已经被调用了只是被Picture挡住了而已。原因已经找到了,那么怎样才能不让Picture挡住子窗体呢。经过查找发现了这样一句代码: Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long  可是这是什么意思呢,原来这是一段在模块里声明API函数的代码,我们要声明的就是SetParent函数。而SetParent这个API函数的功能就是该函数改变某个子窗口的父窗口。(详见百度百科:http://baike.baidu.com/view/1080343.htm?fr=aladdin)。现整理如下表:
SetParent
函数原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent)
在MDI窗体调用子窗体时怎样使不被MDI窗体上的图片挡住 - 代晓霞 - 代晓霞 廊坊师范学院信息技术提高班十一期
了解了SetParent函数后,我们言归正传来解决我们上面提到的问题。

首先在模块中声明SetParent函数:
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
其次在MDI窗体的菜单中单击想要调用的子窗体,如图:

点进入click事件后添加如下格式的代码,即可。

(格式为:SetParent  想要调用的子窗体名称 .hWnd,MDI窗体名称.hWnd)
添加了如上代码后会发现又有问题了,那就是显示的子窗体是一个和MDI主窗体一样大的一个边框,如下图


只有把他往下拉一下才可以看到就只是一个边框,如果不注意的话就会找不到。而且要点击最大化才可以看全子窗体


解决方法:1.将每个子窗体的borderstyle = 1  即可。

2.. 我们可以通过添加代码   Me.WindowState = 0
                                               Me.Width = 数字
                                               Me.Height= 数字
在将要调用的子窗体的maxbutton 和 minbutton设置成ture 即可(来根据自己的需要确定窗体大小)。
注:VB实现自身窗口最大化、最小化显示,用Me.WindowState来实现。关于WindowState的几种状态:WindowState = 0指正常状态,WindowState = 1是指窗口最小化,WindowState = 2是指窗口最大化显示,用此可实现窗口标题栏右下角最小化、最大化按钮点击后的效果。

虽然这只是一个小小的知识点,但我相信可以积少成多厚积薄发。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章