簡體   English   中英

禁用“關閉”按鈕而不隱藏“控制箱”

[英]Disable the Close button without hiding the Controlbox

我有一個我不希望用戶能夠關閉表單的應用程序。 好的,很簡單。 只需為表單設置ControlBox = false

但是,我想將應用程序圖標保留在表單的左上角。 輕微,我知道,但是細節對我來說有意義。

設置Controlbox = false還會使應用程序的圖標在窗體的左上角消失。 有沒有解決的辦法??

是我使用的代碼。

我的VB.Net版本。

Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overrides ReadOnly Property CreateParams() As Windows.Forms.CreateParams
    Get
        Dim mdiCp As Windows.Forms.CreateParams = MyBase.CreateParams
        mdiCp.ClassStyle = mdiCp.ClassStyle Or CP_NOCLOSE_BUTTON
        Return mdiCp
    End Get
End Property

我需要一個可以有條件地禁用關閉功能的選項(就像標准MessageBoxYesNo問題所做的YesNo ),因此接受的答案對我不起作用,或者可能我看不到如何使它起作用。 我結束了這個

Private Const MF_BYPOSITION As Int32 = &H400
Private Const MF_REMOVE As Int32 = &H1000
Private Declare Auto Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal bRevert As Int32) As IntPtr
Private Declare Auto Function GetMenuItemCount Lib "user32.dll" (ByVal hMenu As IntPtr) As Int32
Private Declare Function DrawMenuBar Lib "user32.dll" (ByVal hwnd As IntPtr) As Boolean
Private Declare Auto Function RemoveMenu Lib "user32.dll" (ByVal hMenu As IntPtr, ByVal nPosition As Int32, ByVal wFlags As Int32) As Int32

Public Sub DisableCloseButton(ByVal hwnd As IntPtr)
    Dim hMenu As IntPtr, n As Int32
    hMenu = GetSystemMenu(hwnd, 0)
    If Not hMenu.Equals(IntPtr.Zero) Then
        n = GetMenuItemCount(hMenu)
        If n > 0 Then
            RemoveMenu(hMenu, n - 1, MF_BYPOSITION Or MF_REMOVE)
            RemoveMenu(hMenu, n - 2, MF_BYPOSITION Or MF_REMOVE)
            DrawMenuBar(hwnd)
        End If
    End If
End Sub

通過調用

DisableCloseButton(MyForm.Handle)

當我將其用於自定義消息框時,我沒有測試如何重新啟用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM