● [X]ボタンを無効にする ●

やり方はいろいろあるね。

'システムメニューのハンドルを取得する
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 DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

Private Const MF_BYCOMMAND = &H0&
Private Const MF_BYPOSITION = &H400&
Private Const SC_CLOSE = &HF060&

'---------------------------------------------------------------------------
' 関数名: DisableXButton
' 機能  : 右上の[X]を無効にする
' 引数  :(in) hWnd … ウインドウのハンドル
' 戻り値: 正常:0以外、 エラー:0
'---------------------------------------------------------------------------
Public Function DisableXButton(ByVal hWnd As Long) As Long

    Dim hSystemMenu As Long

    hSystemMenu = GetSystemMenu(hWnd, False)

    '↓これでもよい、多分
    'Call DeleteMenu(hSystemMenu, 6, MF_BYPOSITION)
    'Call DeleteMenu(hSystemMenu, 5, MF_BYPOSITION)
    Call DeleteMenu(hSystemMenu, SC_CLOSE, MF_BYCOMMAND)

    DisableXButton = DrawMenuBar(hWnd)

End Function


'ウインドウクラスを取得する
Private Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

'ウインドウクラスを変更する
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GCL_STYLE = (-26)
Private Const CS_NOCLOSE = &H200

'---------------------------------------------------------------------------
' 関数名: DisableXButton
' 機能  : 右上の[X]を無効にする
' 引数  :(in) hWnd … ウインドウのハンドル
' 返り値: 設定したウィンドウスタイル値   エラー時は0が返る
'---------------------------------------------------------------------------
Public Function DisableXButton(ByVal hWnd As Long) As Long

    Dim Style As Long

    Style = GetClassLong(hWnd, GCL_STYLE)
    If Style = 0 Then Exit Function
    Style = Style Or CS_NOCLOSE
    DisableXButton = SetClassLong(hWnd, GCL_STYLE, Style)

End Function

戻る