閉じる「×」ボタンの無効化(W)          <TOP>


閉じる「×」ボタンを無効化します。

GetSystemMenu システムメニューのハンドル取得
DeleteMenu システムメニューの項目を削除
DrawMenuBar メニューバーを再描画
 

左:起動直後    右:メニューの内容

 

左:「実行」ボタンで「×」を無効化    右:メニューの内容

 

区切り線を削除しない場合のメニューの内容

 

'================================================================
'= 閉じる「×」ボタンの無効化(W)
'=    (DrawMenuBar.bas)
'================================================================
#include "Windows.bi"

' システムメニューのハンドル取得
Declare Function Api_GetSystemMenu& Lib "user32" Alias "GetSystemMenu" (ByVal hWnd&, ByVal bRevert&)

' システムメニューの項目を削除
Declare Function Api_DeleteMenu& Lib "user32" Alias "DeleteMenu" (ByVal hMenu&, ByVal nPosition&, ByVal wFlags&)

' メニューバーを再描画
Declare Function Api_DrawMenuBar& Lib "user32" Alias "DrawMenuBar" (ByVal hWnd&)

#define SC_CLOSE &HF060                 '閉じる
#define MF_BYCOMMAND &H0                'nPositionはメニュー項目のID

Var Shared Button1 As Object
Var Shared Button2 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14


'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hMenu As Long
    Var Ret As Long

    hMenu = Api_GetSystemMenu(GethWnd, 0)
    If hMenu Then
        '「×」を削除
        Ret = Api_DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)

        '区切り線を削除
        Ret = Api_DeleteMenu(hMenu, 0, MF_BYCOMMAND)

        '変更を反映するために再描画
        Ret = Api_DrawMenuBar(GethWnd)
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    End
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End