这是使关闭按钮失效的代码
Option Explicit
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
Private Const MF_REMOVE = &H1000&
Private Const SC_CLOSE = &HF060&Private Sub Form_Load()
    RemoveMenu GetSystemMenu(Me.hwnd, False), SC_CLOSE, MF_REMOVE
End Sub
现在在显示窗体时怎样才能是关闭按钮生效(小弟的程序根据不同的条件显示窗体时,有时需要关闭按钮,有时禁止关闭按钮)

解决方案 »

  1.   

    禁止关闭按钮没必要这么麻烦的,不用调用API,你可以考虑用下面的办法:dim blnClose as boolean  '通用过程变量blnClose,false表示不允许关闭当前窗体Private Sub Form_Unload(Cancel As Integer)
        if blnClose=false then
            Cancel = 1
            MsgBox "现在你不可以关闭窗体!"
        end if
    End Sub
      

  2.   

    http://www.china-askpro.com/msg3/qa27.shtml
    http://www.china-askpro.com/msg6/qa80.shtml
      

  3.   

    AppendMenu VB声明 
    Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long 
    说明 
    在指定的菜单里添加一个菜单项 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hMenu Long,菜单句柄 
    wFlags Long,参考ModifyMenu函数中的菜单常数标志定义表,其中列出了允许使用的所有常数 
    wIDNewItem Long,指定菜单条目的新命令ID。如果在wFlags参数中指定了MF_POPUP字段,那么这应该是指向一个弹出式菜单的句柄 
    lpNewItem String(相应的vb声明见注解),如果在wFlags参数中指定了MF_STRING标志,这就代表在菜单中设置的字串。如设置了MF_BITMAP标志,这就代表一个Long型变量,其中包含了一个位图句柄。如设置了MF_OWNERDRAW,这个值就会包括在DRAWITEMSTRUCT和MEASUREITEMSTRUCT结构中,在条目需要重画的时候由windows发送出去 
    注解 
    Declare Function AppendMenu& Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String)
     
    不知是不是
      

  4.   

    不会吧。
    VB6中,就可以呀。我试了一下,可。
    Private Sub Form_Unload(Cancel As Integer)
                Cancel = 1
            MsgBox "现在你不可以关闭窗体!"
    End Sub
      

  5.   

    漏了 return 0
    or
    exit sub
      

  6.   

    to yuyes:
     小弟的程序主要是有时不让产生form_unload事件,如果产生了此事件,下次显示这个窗体时就会产生form_load事件,这样就会重新初始化窗体,这是不允许的(因为在show这个窗体时,要保留上次hide之前的结果)
      

  7.   

    这样做就不会有 Form_Load 了
    Private Sub Form_Unload(Cancel As Integer)
        Cancel = True
        Me.Hide
    End Sub
      

  8.   

    那就在yuyes的代码里再加上一句:me.hide,把自己隐藏。