'向菜单栏添加图标操作 api 声明 Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Public Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long Public Const MF_BITMAP = &H4& Public Type MENUITEMINFO cbSize As Long fMask As Long fType As Long fState As Long wID As Long hsubmenu As Long hbmpChecked As Long hbmpUnchecked As Long dwItemData As Long dwTypeData As String cch As Long End Type Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long Public Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean Public Const MIIM_ID = &H2 Public Const MIIM_TYPE = &H10 Public Const MFT_STRING = &H0& Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function GetMenuCheckMarkDimensions Lib "user32" () As Long Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Public Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _ ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _ ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long Public Const SRCCOPY = &HCC0020
'Dim hMenu 'Dim hsubmenu 'Dim hID 'Dim hMenuCount 'Dim I 'Dim J ''''''主要在对bmp图像进行处理上。 'Dim hDc5 As Long 'Dim hBitmap As Long 'Dim hDstDc As Long 'Dim pic As New StdPicture 'Set pic = LoadPicture(App.Path + "\Icon&Bmp\" + "open.bmp") ' '读取图形档 'hDc5 = CreateCompatibleDC(0) '建立Memory DC 'I = SelectObject(hDc5, pic.Handle) '在该memoryDC上放上bitmap图 'I = GetMenuCheckMarkDimensions '取得SetMenuItemBitmaps 所需Bitmap大小 'dstWidth = I Mod 2 ^ 16 'dstHeight = I / 2 ^ 16 ''建一个大小为dstWidh * dstHeight大小的Bitmap 'hBitmap = CreateCompatibleBitmap(Me.hdc, dstWidth, dstHeight) 'hDstDc = CreateCompatibleDC(Me.hdc) '建memory dc ''设该memory dc的绘图区大小=该bitmap大小,且在该memory dc上的绘图便是在 ''该bitmap图上画图 'SelectObject hDstDc, hBitmap 'srcHeight = Me.ScaleY(pic.Height, vbHimetric, vbPixels) 'srcWidth = Me.ScaleX(pic.Width, vbHimetric, vbPixels) 'Call StretchBlt(hDstDc, 0, 0, dstWidth, dstHeight, hDc5, 0, 0, srcWidth, srcHeight, SRCCOPY) 'GetBitMapHandle = hBitmap 'Call DeleteDC(hDc5) 'Call DeleteDC(hDstDc) ''hMenu:得到当前应用程序的菜单句柄 'hMenu = GetMenu(Me.hwnd) ''hMenuCount:得到当前应用程序的菜单数目 'hMenuCount = GetMenuItemCount(hMenu) 'For I = 0 To hMenuCount - 1 Step 1 ' 'Get the handle of the first submenu (Hello) ' 'hsubmenu:得到每个菜单的子菜单的句柄 ' hsubmenu = GetSubMenu(hMenu, I) ' 'Get the menuId of the first entry (Bitmap) ' For J = 0 To 10 Step 1 ' 'hID:得到每个子菜单的标识ID ' hID = GetMenuItemID(hsubmenu, J) ' 'Add the bitmap ' SetMenuItemBitmaps hMenu, hID, MF_BITMAP, hBitmap, hBitmap ' Next J 'Next I
正解: Public Declare Function CheckMenuRadioItem Lib "user32" (ByVal hMenu As Long, ByVal un1 As Long, ByVal un2 As Long, ByVal un3 As Long, ByVal un4 As Long) As Long具体用法自己搜索
Private Sub A_Click()
A.Caption = "·" & "标准型(T)"
B.Caption = " " & "科学型(S)"
End Sub
Private Sub B_Click()
A.Caption = " " & "标准型(T)"
B.Caption = "·" & "科学型(S)"
End Sub
m1.Caption = "● 科学型"
m2.Caption = " 标准型"
End SubPrivate Sub m2_Click()
m1.Caption = " 科学型"
m2.Caption = "● 标准型"
End Sub
没有将√改成●的方法吗?因为我的√是用checked=true写的,仅仅是改caption ●和√没办法对齐,不太美观.
'向菜单栏添加图标操作 api 声明
Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
Public Const MF_BITMAP = &H4&
Public Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hsubmenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean
Public Const MIIM_ID = &H2
Public Const MIIM_TYPE = &H10
Public Const MFT_STRING = &H0&
Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function GetMenuCheckMarkDimensions Lib "user32" () As Long
Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Public Const SRCCOPY = &HCC0020
'Dim hMenu
'Dim hsubmenu
'Dim hID
'Dim hMenuCount
'Dim I
'Dim J
''''''主要在对bmp图像进行处理上。
'Dim hDc5 As Long
'Dim hBitmap As Long
'Dim hDstDc As Long
'Dim pic As New StdPicture
'Set pic = LoadPicture(App.Path + "\Icon&Bmp\" + "open.bmp")
' '读取图形档
'hDc5 = CreateCompatibleDC(0) '建立Memory DC
'I = SelectObject(hDc5, pic.Handle) '在该memoryDC上放上bitmap图
'I = GetMenuCheckMarkDimensions '取得SetMenuItemBitmaps 所需Bitmap大小
'dstWidth = I Mod 2 ^ 16
'dstHeight = I / 2 ^ 16
''建一个大小为dstWidh * dstHeight大小的Bitmap
'hBitmap = CreateCompatibleBitmap(Me.hdc, dstWidth, dstHeight)
'hDstDc = CreateCompatibleDC(Me.hdc) '建memory dc
''设该memory dc的绘图区大小=该bitmap大小,且在该memory dc上的绘图便是在
''该bitmap图上画图
'SelectObject hDstDc, hBitmap
'srcHeight = Me.ScaleY(pic.Height, vbHimetric, vbPixels)
'srcWidth = Me.ScaleX(pic.Width, vbHimetric, vbPixels)
'Call StretchBlt(hDstDc, 0, 0, dstWidth, dstHeight, hDc5, 0, 0, srcWidth, srcHeight, SRCCOPY)
'GetBitMapHandle = hBitmap
'Call DeleteDC(hDc5)
'Call DeleteDC(hDstDc)
''hMenu:得到当前应用程序的菜单句柄
'hMenu = GetMenu(Me.hwnd)
''hMenuCount:得到当前应用程序的菜单数目
'hMenuCount = GetMenuItemCount(hMenu)
'For I = 0 To hMenuCount - 1 Step 1
' 'Get the handle of the first submenu (Hello)
' 'hsubmenu:得到每个菜单的子菜单的句柄
' hsubmenu = GetSubMenu(hMenu, I)
' 'Get the menuId of the first entry (Bitmap)
' For J = 0 To 10 Step 1
' 'hID:得到每个子菜单的标识ID
' hID = GetMenuItemID(hsubmenu, J)
' 'Add the bitmap
' SetMenuItemBitmaps hMenu, hID, MF_BITMAP, hBitmap, hBitmap
' Next J
'Next I
Public Declare Function CheckMenuRadioItem Lib "user32" (ByVal hMenu As Long, ByVal un1 As Long, ByVal un2 As Long, ByVal un3 As Long, ByVal un4 As Long) As Long具体用法自己搜索
改的方法肯定有,例如用 Bitblt 贴图。问题是都比较复杂。最简单的还是,把 check 也改由 Caption 显示。因为 Check 不 check,还是你的代码说了算。