ビットマップアイコンメニュー
ここに載せてあるソースコードは、参考のために載せてあります
サンプルコードは、一番下にLZHとしてあります
Option Explicit '13×13の画像しか使えません 'このサンプルの画像は、16×16の画像を使っているので 'うまくいってませんが、13×13の画像を自作すれば問題ないでしょう。 Private Sub cmdMenuChange_Click() CreateBitmapMenu Me.hWnd End Sub Sub CreateBitmapMenu(ByVal hWnd As Long) Dim hMenu As Long, hSubMenu As Long, hID As Long Dim MainMenu_MaxCount As Long, SubMenu_MaxCount As Long Dim jMain As Long, jSub As Long Dim lngImageCount As Long, picImage As Picture Dim Image_MaxCount As Long 'イメージリストのイメージ数を代入します Image_MaxCount = ilsMenuIcon.ListImages.Count 'フォームのメニューハンドルを取得します hMenu = GetMenu(hWnd) '親メニューの数を取得します MainMenu_MaxCount = GetMenuItemCount(hMenu) '親メニューがない(メニューが存在しない)場合は、内部を処理しません If Not (MainMenu_MaxCount = -1) Then '親メニューの数だけループします For jMain = 0 To MainMenu_MaxCount - 1 '親メニューのハンドルを取得します hSubMenu = GetSubMenu(hMenu, jMain) '子メニューがない場合は、内部を処理しません If Not (hSubMenu = -1) Then '子メニューの数を取得します SubMenu_MaxCount = GetMenuItemCount(hSubMenu) '子メニューの数だけループします For jSub = 0 To SubMenu_MaxCount - 1 '子メニューのIDを取得します hID = GetMenuItemID(hSubMenu, jSub) 'イメージリストのインデックス値を増やしていきます lngImageCount = lngImageCount + 1 'イメージが足りない場合は、サブプロシージャから出ます If lngImageCount > Image_MaxCount Then Exit Sub 'イメージリストの指定イメージのタグが "X" なら、 'その子メニューにビットマップアイコンを表示しません If Not (ilsMenuIcon.ListImages(lngImageCount).Tag = "X") Then 'イメージの代入です Set picImage = ilsMenuIcon.ListImages(lngImageCount).Picture '子メニューにビットマップアイコンを表示します '題4引数は、メニューのCheckdが False のビットマップです '題5引数は、その逆です SetMenuItemBitmaps hMenu, hID, MF_BITMAP, picImage, 0 End If Next End If Next End If End Sub |