システムメニューに項目を挿入          <TOP>


システムメニューに新たな項目を挿入します。

InsertMenu 指定されたメニューに新しいメニュー項目を挿入し、他のメニュー項目を下へ移動

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

GetMenuItemCount メニューの項目数を取得

GetMenuItemID メニュー項目のIDを取得

 

 

'================================================================
'= システムメニューに項目を挿入
'=    (InsertMenu.bas)
'================================================================
#include "Windows.bi"

' 指定されたメニューに新しいメニュー項目を挿入し、他のメニュー項目を下へ移動
Declare Function Api_InsertMenu& Lib "user32" Alias "InsertMenuA" (ByVal hMenu&, ByVal uPosition&, ByVal uFlags&, ByVal uIDNewItem&, ByVal lpNewItem$)

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

' メニューの項目数を取得
Declare Function Api_GetMenuItemCount& Lib "user32" Alias "GetMenuItemCount" (ByVal hMenu&)

' メニュー項目のIDを取得
Declare Function Api_GetMenuItemID& Lib "user32" Alias "GetMenuItemID" (ByVal hMenu&, ByVal nPos&)

#define SC_CLOSE &HF060                 '閉じる
#define SC_MAXIMIZE &HF030              '最大化
#define SC_MINIMIZE &HF020              '最小化
#define SC_MOVE &HF010                  '移動
#define SC_RESTORE &HF120               '元のサイズに戻す
#define SC_SIZE &HF000                  'サイズ変更

#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_HILITE &H80                  'メニューの項目を強調表示
#define MF_MOVE &H1000                  '
#define MF_SEPARATOR &H800              'メニュー項目はセパレータ
#define MF_STRING &H0                   '文字列
#define MF_UNHILITE &H0                 'メニューの項目を強調表示しない

Var Shared Text1 As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object

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

Var Shared Cnt As Integer

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
  Var hMenu As Long
    Var nPos As Long
    Var mMax As Long
    Var NewStr As String
  Var Ret As Long

    Cnt = Cnt + 1
    NewStr = "追加メニュー項目" & Trim$(Str$(Cnt))

    hMenu = Api_GetSystemMenu(GethWnd, 0)   'システムメニューのハンドル取得

    mMax = Api_GetMenuItemCount(hMenu)      'メニューの項目数を取得

    nPos = Val(Edit1.GetWindowText)         '挿入場所を設定

    If nPos < 0 Or nPos > mMax Then
        Edit1.SetWindowText ""
        Edit1.SetFocus
        Exit Sub
    End If

    Ret = Api_GetMenuItemID(hMenu, nPos)
   
    Ret = Api_InsertMenu(hMenu, Ret, MF_BYCOMMAND, 0, NewStr)

    If Ret <> 0 Then A% = MessageBox("", "「" & NewStr & "」を追加しました", 0, 2)
End Sub

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