【前言】
MDI窗体在很多软件中都作为母窗体进行设计,比如说我们常用的Wors、Excel等,那么什么是MDI呢?所谓,MDI,是Multiple DocumentInterface的缩写,在VC++开发时,如果使用MFC,则创建工程时,一般会引导用户去选择单文档窗体还是多文档窗体。MDI是微软为开发人员提供的用来创建同时操作多个文档的编程接口。所谓Document相当于一个线程,它在属于自己的空间中,处理特定的事务。用户可以查看或者完成数字报表制作、文本编辑或者画图等操作,仅仅通过简单的移动鼠标从一个空间到另一个空间。
一个MDI应用类似于Windows桌面接口,都包含多个视图,也就是我们在MFC中常说的View。但是,与Windows桌面接口不一样的是,MDI的视图空间仅限于本应用之内。
MDI广泛应用于多个窗体间传值,同时查看相同数据的不同表现形式,再一个浏览器中同时打开多个网页等方面。总之,多文档接口多应用在需要同时处理多个事务的情形。其实,类似于我们常说的并行计算,只是不同的表现形式罢了!
MDI虽然有这么多的优点但是他没有MaxButton和MinButton属性,不能控制窗体的最大化和最小化,下面将介绍使用代码让其窗体没有最大化按钮和想要我们的大小。
【代码部分】
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Const WS_SYSMENU = &H80000
Const WS_MINIMIZEBOX = &H20000
Const WS_MAXIMIZEBOX = &H10000
Const GWL_STYLE = (-16)
Const SC_MAXIMIZE = &HF030&
Private Sub MDIForm_Load()
Dim TempLng As Long
Dim R As Integer
Dim MyMenu As Long
TempLng = GetWindowLong(Me.hwnd, GWL_STYLE)
TempLng = TempLng And Not WS_MAXIMIZEBOX
SetWindowLong Me.hwnd, GWL_STYLE, TempLng
FlashWindow Me.hwnd, True
FlashWindow Me.hwnd, False
MyMenu = GetSystemMenu(Me.hwnd, 0)
RemoveMenu MyMenu, SC_MAXIMIZE, R
Picture1.Picture = LoadPicture(App.Path & "\3.jpg")
End Sub
Private Sub MDIForm_Resize()
If Me.WindowState <> 1 Then
'窗体不是最小化时执行固定窗口大小的操作 Me.Height = 10500 Me.Width = 17500 End If End Sub
【后记】
运行效果如下图所示