1.你可以这样做
Private Sub MDIForm_Unload(Cancel As Integer)
    If 条件不满足 Then
        Cancel = 1 '返回程序,不退出
        Exit Sub
    Endif
End Sub
最大化和最小化你只能通过窗体状态控制,要屏蔽只能用API实现。
2.你可以用 API 的 FindWindow 函数查找窗体。不用 API 也可以实现,不过比较麻烦,
特别是你有好多不同的子窗体的情况。

解决方案 »

  1.   

    可使用setwindowlong函数修改MDIForm的窗口样式
    【VB声明】
      Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long【别名】
      SetWindowLongA【说明】
      在窗口结构中为指定的窗口设置信息 【返回值】
      Long,指定数据的前一个值 【参数表】
      hwnd -----------  Long,欲为其取得信息的窗口的句柄  nIndex ---------  Long,请参考GetWindowLong函数的nIndex参数的说明  dwNewLong ------  Long,由nIndex指定的窗口信息的新值
    【VB声明】
      Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long【别名】
      GetWindowLongA【说明】
      从指定窗口的结构中取得信息 【返回值】
      Long,由nIndex决定。零表示出错。会设置GetLastError 【参数表】
      hwnd -----------  Long,欲为其获取信息的窗口的句柄  nIndex ---------  Long,欲取回的信息,可以是下述任何一个常数:
      GWL_EXSTYLE
      扩展窗口样式
      GWL_STYLE
      窗口样式
      GWL_WNDPROC
      该窗口的窗口函数的地址
      GWL_HINSTANCE
      拥有窗口的实例的句柄
      GWL_HWNDPARENT
      该窗口之父的句柄。不要用SetWindowWord来改变这个值
      GWL_ID
      对话框中一个子窗口的标识符
      GWL_USERDATA
      含义由应用程序规定
      DWL_DLGPROC
      这个窗口的对话框函数地址
      DWL_MSGRESULT
      在对话框函数中处理的一条消息返回的值
      DWL_USER
      含义由应用程序规定