SetMenuToRight()
指定した番号より右にあるメニューを、すべて右寄せにします。
「ヘルプ(&H)」だけ右寄せにしたい、という場合などに。それ以外での出番はちょっと思いつきません(^_^;
'標準モジュールに記述します。 Option Explicit 'メニューハンドルを取得する Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long 'メニュー項目のハンドルを取得する Private Declare Function GetSubMenu Lib "user32" _ (ByVal hMenu As Long, ByVal nPos As Long) As Long 'メニュー項目のタイトルを取得する Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" _ (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, _ ByVal nMaxCount As Long, ByVal wFlag As Long) As Long 'メニュー項目を上書きする Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" _ (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _ ByVal wIDNewItem As Long, ByVal lpString As String) As Long Private Const MF_BYPOSITION = &H400& Private Const MF_POPUP = &H10& Private Const MF_HELP = &H4000& Public Sub SetMenuToRight(FormHWnd As Long, Index As Long) 'メニューの項目を右寄せにする '<引数> ' FormHwnd : メニューのあるフォームのウィンドウハンドル ' Index : 右寄せにするメニュータイトルのインデックス(0から始まる)。 ' これより右側のメニューがすべて右に寄せられる Dim hMenu As Long 'メニューハンドル Dim hSubMenu As Long '指定メニューのハンドル Dim strBuf As String * 255 'バッファ Dim strMenuCaption As String '指定メニューのキャプション Dim lngRet As Long 'APIの戻り値 'メニューのハンドル取得 hMenu = GetMenu(FormHWnd) '指定メニュー項目のハンドル取得 hSubMenu = GetSubMenu(hMenu, Index) '指定メニュー項目のキャプション取得 lngRet = GetMenuString(hMenu, Index, strBuf, 255&, MF_BYPOSITION) strMenuCaption = Left$(strBuf, InStr(1, strBuf, vbNullChar) - 1) 'メニューの右寄せ(指定より右側の項目も自動的に右寄せになります) Call ModifyMenu(hMenu, Index, MF_BYPOSITION Or MF_POPUP Or MF_HELP, hSubMenu, strMenuCaption) End Sub
実行例:
'フォームの Load イベントで呼び出します。 '例として、メニューが「ファイル(&F)」「編集(&E)」「ツール(&T)」「ヘルプ(&H)」の場合、 'ヘルプは3番(0から数える)になるので、次のように記述します。 Private Sub Form_Load() '「ヘルプ(&H)」を右寄せにする Call SetMenuToRight(Me.hwnd, 3) End Sub
実行画面