システムメニューの削除 <TOP>
システムメニュー(タイトルバーのアイコンをクリックしたときに表示される)を削除します。
GetSystemMenu システムメニューのハンドル取得
DeleteMenu システムメニューの項目を削除
DrawMenuBar メニューバーを再描画
例では、実行ボタンをクリックすると、メニュー項目「移動」が削除された状態を表しています。見た目に変化はありませんが、フォームを移動させたくない場合便利です。
項目インデックスの最上行は、0になります。
※参照
<閉じるボタン「×」の無効化>
'================================================================ '= システムメニューの削除 '= (DeleteMenu.bas) '================================================================ #include "Windows.bi" ' システムメニューの項目を削除 Declare Function Api_DeleteMenu& Lib "user32" Alias "DeleteMenu" (ByVal hMenu&, ByVal nPosition&, ByVal wFlags&) ' システムメニューのハンドル取得 Declare Function Api_GetSystemMenu& Lib "user32" Alias "GetSystemMenu" (ByVal hWnd&, ByVal bRevert&) ' メニューバーを再描画 Declare Function Api_DrawMenuBar& Lib "user32" Alias "DrawMenuBar" (ByVal hWnd&) #define MF_APPEND &H100 ' #define MF_BYCOMMAND &H0 'nPositionはメニュー項目のID #define MF_BYPOSITION &H400 'nPositionはメニュー項目のインデックス #define MF_CHECKED &H8 'メニュー項目にチェックをつける #define MF_DISABLED &H2 ' #define MF_GRAYED &H1 'グレー表示されて選択できない #define MF_SEPARATOR &H800 'メニュー項目はセパレータ #define MF_STRING &H0 '文字列 #define SC_CLOSE &HF060 '閉じる #define SC_MAXIMIZE &HF030 '最大化 #define SC_MINIMIZE &HF020 '最小化 #define SC_MOVE &HF010 '移動 #define SC_RESTORE &HF120 '元のサイズに戻す #define SC_SIZE &HF000 'サイズ変更 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hSysMenu As Long Var Ret As Long 'システムメニューのハンドルを取得 hSysMenu = Api_GetSystemMenu(GethWnd, 0) 'システムメニューの「移動」を削除 Ret = Api_DeleteMenu(hSysMenu, SC_MOVE, MF_BYCOMMAND) 'システムメニューのインデックス(最上行は0) 'Ret = Api_DeleteMenu(hSysMenu, 1, MF_BYPOSITION) 'メニューバーの再描画 Ret = Api_DrawMenuBar(hSysMenu) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End