我想让窗口外观不要那个关闭的"X",最小化和最大化的图表在属性窗口里可以设置是否需要,但是那个关闭的我就不知道在哪设置或者实现了.
最好整个标题栏都不要,请问高手该如何实现呀?

解决方案 »

  1.   

    Public Declare Function GetSystemMenu Lib "user32" ( _
                                       ByVal hwnd As Long, _
                                       ByVal bRevert As Long) As Long
    Public Declare Function GetMenuItemCount Lib "user32" ( _
                                       ByVal hMenu As Long) As Long
    Public Declare Function RemoveMenu Lib "user32" ( _
                                       ByVal hMenu As Long, _
                                       ByVal nPosition As Long, _
                                       ByVal wFlags As Long) As Long
    Public Declare Function DrawMenuBar Lib "user32" ( _
                                       ByVal hwnd As Long) As LongPublic Const MF_BYPOSITION = &H400&
    Public Const MF_DISABLED = &H2& 
    '*----------------------------------------------------------*
    '* Name       : DisableX                                    *
    '*----------------------------------------------------------*
    '* Purpose    : Disables the close button ('X') on form.    *
    '*----------------------------------------------------------*
    '* Parameters : frm    Required. Form to disable 'X'-button *
    '*----------------------------------------------------------*
    '* Description: This function disables the X-button on a    *
    '*            : form, to keep the user from closing a form  *
    '*            : that way, but keeps the min & max buttons.  *
    '*----------------------------------------------------------*
    Public Sub DisableX(frm As Form)
      Dim hMenu As Long, nCount As Long  'Get handle to system menu
      hMenu = GetSystemMenu(frm.hwnd, 0)  'Get number of items in menu
      nCount = GetMenuItemCount(hMenu)  'Remove last item from system menu (last item is 'Close')
      Call RemoveMenu(hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION)  'Redraw menu
      DrawMenuBar frm.hwndEnd Sub 
      

  2.   

    屏蔽屏幕右上角的"X"要Disable Form "X" --> Close的功能(变暗灰色),事实上便是从Form左上方的System
    Menu将关闭(Close)的MenuItem去除掉便可以了,去除後,又该如何Enable "X"呢,那
    便是再将 关闭(Close)的MenuItem加回去,但这里有个小问题,加回去之後"X"仍是暗
    灰色,要等到我们做了某些固定的动作之後(如TitleBar上click一下,或选一下System
    Menu等),它才会再度变Enable的颜色,我不知道让TitleBar上的这些东西Refresh要送
    什麽讯息,知道者请告诉我,所以现在我暂且Send一个在TitleBar上按下Mouse左键的讯
    息给Form,令"X"能出现Enable的颜色。'需一个Command Button
    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 AppendMenu Lib "User32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) 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
    Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_NCLBUTTONDBLCLK = &HA3
    Const WM_NCLBUTTONDOWN = &HA1
    Const HTCAPTION = 2
    Const MF_STRING = &H0&
    Const MF_BYCOMMAND = &H0&
    Const SC_CLOSE = &HF060Private hMenu As Long
    Private CloseStr As String '记录Close MenuItem的字串'将"关闭"的那一个MenuItem 加回来
    Private Sub Command1_Click()
    Call AppendMenu(hMenu, MF_STRING, SC_CLOSE, CloseStr)'令"X"能出现Enable的颜色
    Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End SubPrivate 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
     
    不显示窗体标题栏
    将窗体的Borderstyle属性设置为0-None
      

  3.   

    http://expert.csdn.net/Expert/topic/1757/1757547.xml?temp=.5356562
      

  4.   

    屏蔽屏幕右上角的"X"要Disable Form "X" --> Close的功能(变暗灰色),事实上便是从Form左上方的System
    Menu将关闭(Close)的MenuItem去除掉便可以了,去除後,又该如何Enable "X"呢,那
    便是再将 关闭(Close)的MenuItem加回去,但这里有个小问题,加回去之後"X"仍是暗
    灰色,要等到我们做了某些固定的动作之後(如TitleBar上click一下,或选一下System
    Menu等),它才会再度变Enable的颜色,我不知道让TitleBar上的这些东西Refresh要送
    什麽讯息,知道者请告诉我,所以现在我暂且Send一个在TitleBar上按下Mouse左键的讯
    息给Form,令"X"能出现Enable的颜色。'需一个Command Button
    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 AppendMenu Lib "User32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) 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
    Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_NCLBUTTONDBLCLK = &HA3
    Const WM_NCLBUTTONDOWN = &HA1
    Const HTCAPTION = 2
    Const MF_STRING = &H0&
    Const MF_BYCOMMAND = &H0&
    Const SC_CLOSE = &HF060Private hMenu As Long
    Private CloseStr As String '记录Close MenuItem的字串'将"关闭"的那一个MenuItem 加回来
    Private Sub Command1_Click()
    Call AppendMenu(hMenu, MF_STRING, SC_CLOSE, CloseStr)'令"X"能出现Enable的颜色
    Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End SubPrivate 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
     
    不显示窗体标题栏
    将窗体的Borderstyle属性设置为0-None