參考 Windows XP「我的電腦」視窗,選單列右側顯示 LOGO 圖片。開發者詢問 VB6.0 如何實現類似效果。
SetMenuItemBitmapsVB6.0 原生選單列不支援直接在右側放置圖片。需呼叫 Windows API SetMenuItemBitmaps 為選單項目設定位圖,並配合選單項目位置調整,模擬右側 LOGO 效果。
Private Declare Function SetMenuItemBitmaps Lib "user32" Alias "SetMenuItemBitmaps" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal nFlags As Long, _
ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
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 LoadImage Lib "user32" Alias "LoadImageA" _
(ByVal hInst As Long, ByVal lpszName As String, ByVal uType As Long, _
ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal fuLoad As Long) As Long
LoadImage 載入取得 HBITMAP。Private Sub Form_Load()
Dim hMenu As Long, hSubMenu As Long, hBmp As Long
hMenu = GetMenu(Me.hwnd)
' 假設最後一個頂層選單為目標(索引從 0 開始)
Dim menuCount As Long: menuCount = GetMenuItemCount(hMenu)
hSubMenu = GetSubMenu(hMenu, menuCount - 1) ' 取得最後一個下拉選單
' 載入位圖 (從資源或檔案)
hBmp = LoadImage(0, App.Path & "\logo.bmp", 0, 16, 16, &H10) ' LR_LOADFROMFILE
' 設定該選單項目位圖(MF_BYPOSITION=0x400)
SetMenuItemBitmaps hSubMenu, 0, &H400, hBmp, hBmp
End Sub
參考「VB6.0 選單列能否自訂空間或內容」一文,使用 Toolbar 控制項重建頂部導航區,右側直接放置 PictureBox 或 Image 控制項顯示 LOGO,並以按鈕模擬選單項目。此法相容性更好,維護更易。
VB6.0 可透過 API SetMenuItemBitmaps 為選單項目設定圖片,但若需在選單列右側固定顯示 LOGO,建議改用工具列模擬選單列,靈活度與視覺效果更佳。