您的位置:首页 > 其它

机房收费系统(五)有关子窗体的最小化功能

2013-10-03 15:53 204 查看
还记得刚开始看见给的那个机房收费系统原程序时候的感受,窗体能最小化到做下角,而且是单机其他窗体的时候他会自动最小化,从刚开始接触到机房的时候我就觉得他是一个特别神奇的功能,直到昨天把它全部的解决掉,真正的实现这个功能的时候,发现其实他真的是很简单。

首先进行的就是在MDI窗体上添加控件,经历了知道只要在窗体里加入一个picture或者form就能解决问题,或许form不回遇见此类的问题,我加的就是picture控件,紧接着就是子窗体不显示的问题,百度了半天知道调用一个API函数来实现想要的功能

API函数:

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

那该函数该怎么使用呢?又遇见了一个头痛的问题,按照步骤使用

<span style="font-family:KaiTi_GB2312; font-size:24px; color:#993399"><strong>SetParent frmWorklog.hWnd,frmmain.hWnd  
 frmWorklog.Show</strong></span>


然后在要成为子窗体的窗体加载事件中写入:



Call SetParent(Me.hwnd, frmmain.Picmain.hwnd)

Me.WindowState=2 ' 0(正常) 1(最小化) 2(最大化)



可是并没有如愿,总是提醒我只能添加一个MDI窗体,检查了半天都不知道是哪的问题,后来赵崇过来告诉我说是类用错的原因

因为在模块里我定义了这样一句:

Set fmainform = New frmmain

fmainform.Show



所以系统只认识你定义的fmainfrom,而不是frmmain。纠结了半天最后一句话就解决了,这又反应了什么问题呢?不过这个问题在他那也是经过了两天的纠结才解决的。



子窗体显示问题解决了,可是他总是全部平铺在主窗体上,显得很不好看,问题就在于上文你已经决定了子窗体的大小,让me.windowstate=2,也就是最大化的问题,后来我想想既然在frmmain中已经定义了,那还在窗体事件中写那两句话还有什么用呢?达不到我想要的效果,所以我就把它删了!



其实已经用API函数将主窗体和子窗体联系起来了,就不用想的太过于复杂,他本身就有最小化的功能,当变为子窗体的时候就自动到主窗体的一个小角落里了!如图:










最关键的就是让他自动最小化了,解决办法:

<span style="font-family:KaiTi_GB2312; font-size:24px; color:#993399"><strong>'只要不在窗口上就自动执行
Private Sub Form_Deactivate()  '不在是活动窗口时发生
    If Me.WindowState <> 1 Then
        Me.WindowState = 1
    End If
End Sub</strong></span>


这样不仅仅是单机其他的窗体能实现最小化,你只要鼠标不在窗体上了他就会自动最小化


一个小小的问题纠结了自己这么多天,很庆幸解决了啊!不过想想问题不就是一个一个的解决的吗?自己的机房就在这样的问题中度过着,还差最后的结账了,期待啊!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: