如何设置让窗体右上角的那个×无效  
BorderStyle=0除外

解决方案 »

  1.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=194220
    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  Long  
     
    Const  MF_STRING  =  &H0&  
    Const  MF_BYCOMMAND  =  &H0&  
    Const  SC_CLOSE  =  &HF060  
     
    Private  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  
    ---------------------------------------------------------------  
     
    简单一些的  
    Option  Explicit  
    Dim  Exit_Flag  As  Boolean    '    用来标记是否正常退出  
     
    '    如果选择退出按钮,则退出标记为真  
    Private  Sub  Exit_Cmd_Click()  
           Exit_Flag  =  True  
           End  
    End  Sub  
     
    Private  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  
     
    ---------------------------------------------------------------  
     
    新建一个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  Sub  
     
    Private  Sub  Form_Load()  
    Call  DisableX  
    End  Sub
      

  2.   

    http://www.china-askpro.com/msg4/qa64.shtml
      

  3.   

    Private Sub Form_Unload(Cancel As Integer)
    Cancel = 1
    End Sub