指定のメニュー項目を強調表示(太字)          <TOP>


指定したメニュー項目を強調(太字)します。

GetMenu メニューのハンドルを取得

GetSubMenu サブメニューを開く場合そのメニューのハンドルを取得

SetMenuItemInfo メニュー項目に関する情報を変更

DrawMenuBar 指定されたウィンドウのメニューバーを再描画

 

例では、ヘルプ(H)、ページ設定(U)、コピー(C)を強調(太字)設定しています。

メニューバーに対して何らかの変更を加えた場合、その直後にDrawMenuBarでメニューバーを再描画させます。
引数はそのメニューバーが属するウィンドウのハンドルを指定します。

 

'================================================================
'= 指定のメニュー項目を強調表示(太字)
'=    (SetmenuItemInfo2.bas)
'================================================================
#include "Windows.bi"

#define API_FALSE 0
#define API_TRUE 1

#define MFT_BITMAP &H4                  'ビットマップを使ってメニュー項目を表示
#define MFT_MENUBARBREAK &H20           'メニュー項目を新しい列に置く(ドロップダウンメニュー、サブメニュー、ショートカットメニューの時は区切・
#define MFT_MENUBREAK &H40              'メニュー項目を新しい列に置く(区切り線は入らない)
#define MFT_OWNERDRAW &H100             'オーナードローをする時指定
#define MFT_RADIOCHECK &H200            'hbmpCheckedメンバがNULLの時ラジオボタンを使ってチェックされる
#define MFT_RIGHTJUSTIFY &H4000         'メニュー項目が右揃え
#define MFT_RIGHTORDER &H2000           'アラビア語とかヘブライ語の時指定(Win9x・2000)
#define MFT_SEPARATOR &H800             '区切り線(dwTypeDataとcchメンバは無視)
#define MFT_STRING &H0                  'メニュー項目に文字列を使う

#define MFS_CHECKED &H8                 'メニュー項目にチェックをつける
#define MFS_DEFAULT &H1000              'メニュー項目がデフォルトであることを指定
#define MFS_DISABLED &H2                'メニュー項目を選択不可にする
#define MFS_ENABLED &H0                 'メニュー項目を選択可能にする
#define MFS_GRAYED &H1                  'メニュー項目を灰色にして選択不可にする
#define MFS_HILITE &H80                 'メニュー項目をハイライトにする
#define MFS_UNCHECKED &H0               'メニュー項目からチェックをはずす
#define MFS_UNHILITE &H0                'メニュー項目のハイライトをやめる

#define MIIM_CHECKMARKS &H8             'hbmpChecked、hbmpUncheckedメンバをセット
#define MIIM_DATA &H20                  'dwItemDataメンバをセット
#define MIIM_ID &H2                     'wIDメンバをセット
#define MIIM_STATE &H1                  'fStateメンバをセット
#define MIIM_SUBMENU &H4                'hSubMenuメンバをセット
#define MIIM_TYPE &H10                  'fTypeメンバをセット

Type MENUITEMINFO
    cbSize As Long                      '構造体のバイト数
    fMask As Long                       '取得する情報を指定する定数の組み合わせ
    fType As Long                       'メニュー項目のタイプを指定する定数の組み合わせ
    fState As Long                      'メニューの状態を指定する定数の組み合わせ
    wID As Long                         'ユーザー定義のメニュー項目のID
    hSubMenu As Long                    '指定のメニュー項目と関連するサブメニューのハンドル
    hbmpChecked As Long                 'チェックマーク用のビットマップのハンドル
    hbmpUnchecked As Long               '未チェック時のときのビットマップハンドル
    dwItemData As Long                  'メニュー項目と関連するユーザー定義の値
    dwTypeData As Long                  'メニュー項目のタイプ(fMaskにMIIM_Typeを指定したときのみ有効)
    cch As Long                         'メニュー項目のテキストのバイト数
End Type

' 指定されたウィンドウに割り当てられているメニューのハンドルを取得
Declare Function Api_GetMenu& Lib "user32" Alias "GetMenu" (ByVal hWnd&)

' 指定されたメニュー項目がドロップダウンメニューまたはサブメニューを開く場合、そのメニューのハンドルを取得
Declare Function Api_GetSubMenu& Lib "user32" Alias "GetSubMenu" (ByVal hMenu&, ByVal nPos&)

' メニュー項目に関する情報を変更
Declare Function Api_SetMenuItemInfo& Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu&, ByVal uItem&, ByVal fByPosition&, lpMInfo As MENUITEMINFO)

' 指定されたウィンドウのメニューバーを再描画
Declare Function Api_DrawMenuBar& Lib "user32" Alias "DrawMenuBar" (ByVal hWnd&)

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var hMenu As Long
    Var hSubMenu As Long
    Var mii As MENUITEMINFO
    
    hMenu = Api_GetMenu(GethWnd)
  
    If hMenu Then
        '3番目のメニュー(0が起点:ヘルプ)
        mii.cbSize = Len(mii)
        mii.fMask = MIIM_STATE
        mii.fState = MFS_DEFAULT
    
        Ret = Api_SetMenuItemInfo(hMenu, 2, API_TRUE, mii)

        'ファイルのサブメニューポジション
        hSubMenu = Api_GetSubMenu(hMenu, 0)
    
        If hSubMenu Then
            mii.cbSize = Len(mii)
            mii.fMask = MIIM_STATE
            mii.fState = MFS_DEFAULT
      
            '5番目のサブメニューを強調
            Ret = Api_SetMenuItemInfo(hSubMenu, 4, API_TRUE, mii)
        End If
    
        '編集のサブメニューポジション
        hSubMenu = Api_GetSubMenu(hMenu, 1)
    
        If hSubMenu Then
            mii.cbSize = Len(mii)
            mii.fMask = MIIM_STATE
            mii.fState = MFS_DEFAULT
      
            '2番目のサブメニューを強調
            Ret = Api_SetMenuItemInfo(hSubMenu, 1, API_TRUE, mii)
        End If
    End If
    Ret = Api_DrawMenuBar(GethWnd)
End Sub

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