机房收费系统之MDI窗体不显示问题——SetParent函数

      今天在敲机房收费系统的时候,遇到了一个问题,让我十分郁闷——我把某些窗体的MDIChild属性改为Ture后,窗体竟然不显示了!我是百思不得其解啊!奋战了半天,我终于解决了!

      一开始,我只是在菜单的单击事件中写了一句:frmRegister.Show。MDIChild属性为Ture后,窗体是无论如何也显示不出来了。

      为什么MDI子窗体显示不出来了呢?是因为它被frmMain里面的Picture控件挡住了。

      后来我在菜单的单击事件里加了一句:Picture1.Visible=False。后,窗体如愿的显示了。但是这样很不方便,想要看到父窗体里面的内容,还得去设置各个窗体之间的显示问题,想想都头大。

       后来查了一下资料,看了一下师哥师姐的博客。大多引用了一个API函数:SetParent。

      首先要在模块里面声明这个函数:Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long。

       一开始,我在菜单的单击事件里面加了一句:

      SetParent frmRegister.hwnd, frmMain.hwnd。

      结果提示错误:只能有一个父窗体。

      机房收费系统之MDI窗体不显示问题——SetParent函数_第1张图片

     后来又查了一下资料,改为了:SetParent frmRegister.hwnd, Picture1.hwnd。

     然后问题就圆满解决了。

     下面了解了一下SetParent这个API函数吧。

      函数功能:改变某个子窗体的父窗口。

      函数模型:SetParent hWndChild.hwnd, hWndNewParent.hwnd 。

      hWndChild是子窗口的句柄。hWndNewParent是新父窗口的句柄。

      返回值:为子窗体的原父窗口句柄。

      

另外,在子窗体显示的时候,还出现了一个问题。

机房收费系统之MDI窗体不显示问题——SetParent函数_第2张图片

      子窗体只显示一小块,但是可以下拉变大。

      这个问题,其实只需要把窗体的Borderstyle属性由2-Sizable改为1-Fixed Single就好。

      2-Sizable:是双线边框,可以改变窗口大小。

      1-Fixed Single:是单线边框,不可以改变窗口大小。

      3-Fixed Double:是双线边框,不可以改变窗体大小

      4-Fixed Tool Window:窗体外观与工具条相似。有关闭按钮 ,不可改变窗口大小。         5-Sizable Tool Window:窗体外观与工具条相似。有关闭按钮,可以改变窗口大小。

      

     通过这些错误,发现自己的经验真是太太匮乏了。。。以后要好好积累。


你可能感兴趣的:(机房收费系统之MDI窗体不显示问题——SetParent函数)