如题目
怎样让窗体右上角的那个×无效
BorderStyle设成0的方法不算
我要保留窗口最大化和最小化的按钮及其功效
也要求窗体可以自己拖动大小
但是不要使用者可以自行关闭窗体
就是要禁用那个退出的×啦
请问该怎样做

解决方案 »

  1.   

    Private Declare Function GetSystemMenu Lib "User32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function DeleteMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function GetMenuString Lib "User32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As LongConst MF_STRING = &H0&
    Const MF_BYCOMMAND = &H0&
    Const SC_CLOSE = &HF060Private hMenu As Long
    Private CloseStr As String '记录Close MenuItem的字串Private Sub Form_Load()
    hMenu = GetSystemMenu(Me.hwnd, 0)
    CloseStr = String(255, 0)'SC_CLOSE指的便是"关闭"的那一个MenuItem ID
    Call GetMenuString(hMenu, SC_CLOSE, CloseStr, 256, MF_BYCOMMAND)
    CloseStr = Left(CloseStr, InStr(1, CloseStr, Chr(0)) - 1)Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
    End Sub
      

  2.   

    没必要这么烦啦!!!用BORDSTYLE设置为0就可以啦!!就没有那个啦!或者你在
    form1_unload(cancel as integer)
    cancel=1
    end sub
    就差不多啦!具体语法你自己查一下!!!!
      

  3.   

    form1_unload(cancel as integer)
    cancel=true
    end sub
      

  4.   

    简单一些的
    Option Explicit
    Dim Exit_Flag As Boolean  '  用来标记是否正常退出'  如果选择退出按钮,则退出标记为真
    Private Sub Exit_Cmd_Click()
        Exit_Flag = True
        End
    End SubPrivate Sub Form_Load()
        Exit_Flag = False
    End Sub'  根据退出标记,决定是否退出
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        If Exit_Flag = False Then
            Cancel = -1
        End If
    End Sub
      

  5.   

    新建一个EXE,贴下面代码:再运行Private Declare Function GetSystemMenu Lib "USER32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function GetMenuItemCount Lib "USER32" (ByVal hMenu As Long) As Long
    Private Declare Function RemoveMenu Lib "USER32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long
    Private Const MF_BYPOSITION = &H400&
    Private Const MF_REMOVE = &H1000&Private Sub DisableX()
         Dim hMenu, nCount, LO As Long
         hMenu = GetSystemMenu(Me.hwnd, 0)
         nCount = GetMenuItemCount(hMenu)
         LO = RemoveMenu(hMenu, nCount - 1, MF_REMOVE Or MF_BYPOSITION)
         LO = RemoveMenu(hMenu, nCount - 2, MF_REMOVE Or MF_BYPOSITION)
    End SubPrivate Sub Form_Load()
    Call DisableX
    End Sub
      

  6.   

    其实很简单,只要在窗体的QueryUnload事件中令cancel变量为true就可以了,此QueryUnload事件会在关闭窗体前处理“善后”工作,包括是否真正关闭窗体。例:
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
       Cancel = True
    End Sub
    当然如果你在有些情况下真的要关闭窗体,可以对UnloadMode的值进行判断,具体的你可以看MSDN有详细的常量解释。