システムメニューの属性変更          <TOP>


GetSystemMenu システムメニューのハンドル取得

GetMenuString システムメニューのラベルを取得

ModifyMenu メニューの属性を変更

DrawMenuBar メニューバーを再描画

 

例では、「実行」をクリック後システムメニューを見ると、「閉じる(C)」がグレー表示されているのが確認できる。

「実行」後はフォームをダブルクリックして終了させてください。

 

'================================================================
'= システムメニューの属性変更
'=    (ModifyMenu.bas)
'================================================================
#include "Windows.bi"

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

' システムメニューのラベルを取得
Declare Function Api_GetMenuString& Lib "user32" Alias "GetMenuStringA" (ByVal hMenu&, ByVal uIDItem&, ByVal lpString$, ByVal nMaxCount&, ByVal uFlag&)

' メニューの属性を変更
Declare Function Api_ModifyMenu& Lib "user32" Alias "ModifyMenuA" (ByVal hMenu&, ByVal nPosition&, ByVal wFlags&, ByVal wIDNewItem&, ByVal lpString$)

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

#define SC_CLOSE &HF060                 '閉じる
#define MF_GRAYED &H1                   'グレー表示されて選択できない

Var Shared Button1 As Object

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var MyStr As String
    Var hWnd As Long
    Var Length As Long
    Var Ret As Long

    'バッファを確保する
    MyStr = String$(250, Chr$(0))
    Length = Len(MyStr)

    'システムメニューのハンドルを確保
    hWnd = Api_GetSystemMenu(GethWnd, 0)

    'システムメニューのラベルを取得
    Ret = Api_GetMenuString(hWnd, SC_CLOSE, MyStr, Length, MF_GRAYED)

    'メニューの属性を変更
    Ret = Api_ModifyMenu(hWnd, SC_CLOSE, MF_GRAYED, 0, MyStr)

    'メニューバーを再描画
    Ret = Api_DrawMenuBar(GethWnd)
End Sub

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

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