科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用VB打造“超酷”个性化菜单

用VB打造“超酷”个性化菜单

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在这篇文章里,我们就来好好地研究研究用VB怎么制作Office XP风格的菜单

作者:goodname008 来源:论坛 2007年10月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 À¹½Ø²Ëµ¥ÏûÏ¢ (frmMenu ´°¿ÚÈë¿Úº¯Êý)
Function MenuWndProc(ByVal hwnd As Long, ByVal Msg As Long,
¡¡ ByVal wParam As Long, ByVal lParam As Long) As Long
¡¡Select Case Msg
¡¡¡¡Case WM_COMMAND ' µ¥»÷²Ëµ¥Ïî
¡¡¡¡¡¡If MyItemInfo(wParam).itemType = MIT_CHECKBOX Then
¡¡¡¡¡¡¡¡If MyItemInfo(wParam).itemState = MIS_CHECKED Then
¡¡¡¡¡¡¡¡¡¡MyItemInfo(wParam).itemState = MIS_UNCHECKED
¡¡¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡¡¡MyItemInfo(wParam).itemState = MIS_CHECKED
¡¡¡¡¡¡¡¡End If
¡¡¡¡¡¡End If
¡¡¡¡¡¡MenuItemSelected wParam
¡¡¡¡Case WM_EXITMENULOOP ' Í˳ö²Ëµ¥ÏûϢѭ»·(±£Áô)

¡¡¡¡Case WM_MEASUREITEM ' ´¦Àí²Ëµ¥Ïî¸ß¶ÈºÍ¿í¶È
¡¡¡¡¡¡MeasureItem hwnd, lParam
¡¡¡¡Case WM_MENUSELECT ' Ñ¡Ôñ²Ëµ¥Ïî
¡¡¡¡¡¡Dim itemID As Long
¡¡¡¡¡¡itemID = GetMenuItemID(lParam, wParam And &HFF)
¡¡¡¡¡¡If itemID <> -1 Then
¡¡¡¡¡¡¡¡MenuItemSelecting itemID
¡¡¡¡¡¡End If
¡¡¡¡Case WM_DRAWITEM ' »æÖƲ˵¥Ïî
¡¡¡¡¡¡DrawItem lParam
¡¡End Select
¡¡MenuWndProc = CallWindowProc(preMenuWndProc, hwnd, Msg, wParam, lParam)
End Function
' ´¦Àí²Ëµ¥¸ß¶ÈºÍ¿í¶È
Private Sub MeasureItem(ByVal hwnd As Long, ByVal lParam As Long)
¡¡Dim TextSize As Size, hdc As Long
¡¡hdc = GetDC(hwnd)
¡¡CopyMemory MeasureInfo, ByVal lParam, Len(MeasureInfo)
¡¡If MeasureInfo.CtlType And ODT_MENU Then
¡¡¡¡MeasureInfo.itemWidth = lstrlen(MyItemInfo(MeasureInfo.itemID).itemText) *
_(GetSystemMetrics(SM_CYMENU) / 2.5) + BarWidth
¡¡¡¡If MyItemInfo(MeasureInfo.itemID).itemType <> MIT_SEPARATOR Then
¡¡¡¡¡¡MeasureInfo.itemHeight = GetSystemMetrics(SM_CYMENU)
¡¡¡¡Else
¡¡¡¡¡¡MeasureInfo.itemHeight = 6
¡¡¡¡End If
¡¡End If
¡¡CopyMemory ByVal lParam, MeasureInfo, Len(MeasureInfo)
¡¡ReleaseDC hwnd, hdc
End Sub

' »æÖƲ˵¥Ïî
Private Sub DrawItem(ByVal lParam As Long)
¡¡Dim hPen As Long, hBrush As Long
¡¡Dim itemRect As RECT, barRect As RECT, iconRect As RECT, textRect As RECT
¡¡Dim i As Long
¡¡CopyMemory DrawInfo, ByVal lParam, Len(DrawInfo)
¡¡If DrawInfo.CtlType = ODT_MENU Then
¡¡¡¡SetBkMode DrawInfo.hdc, TRANSPARENT

¡¡¡¡' ³õʼ»¯²Ëµ¥Ïî¾ØÐÎ, ͼ±ê¾ØÐÎ, ÎÄ×Ö¾ØÐÎ
¡¡¡¡itemRect = DrawInfo.rcItem
¡¡¡¡iconRect = DrawInfo.rcItem
¡¡¡¡textRect = DrawInfo.rcItem

¡¡¡¡' ÉèÖò˵¥¸½¼ÓÌõ¾ØÐÎ
¡¡¡¡With barRect
¡¡¡¡¡¡.Left = 0
¡¡¡¡¡¡.Top = 0
¡¡¡¡¡¡.Right = BarWidth - 1
¡¡¡¡¡¡For i = 0 To GetMenuItemCount(hMenu) - 1
¡¡¡¡¡¡¡¡If MyItemInfo(i).itemType = MIT_SEPARATOR Then
¡¡¡¡¡¡¡¡¡¡.Bottom = .Bottom + 6
¡¡¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡¡¡.Bottom = .Bottom + MeasureInfo.itemHeight
¡¡¡¡¡¡¡¡End If
¡¡¡¡¡¡Next i
¡¡¡¡¡¡.Bottom = .Bottom - 1
¡¡¡¡End With

¡¡' ÉèÖÃͼ±ê¾ØÐÎ, ÎÄ×Ö¾ØÐÎ
¡¡If BarStyle <> LBS_NONE Then iconRect.Left = barRect.Right + 2
¡¡¡¡iconRect.Right = iconRect.Left + 20
¡¡¡¡textRect.Left = iconRect.Right + 3

¡¡¡¡With DrawInfo

¡¡¡¡' »­²Ëµ¥±³¾°
¡¡¡¡itemRect.Left = barRect.Right
¡¡¡¡hBrush = CreateSolidBrush(BkColor)
¡¡¡¡FillRect .hdc, itemRect, hBrush
¡¡¡¡DeleteObject hBrush


¡¡¡¡' »­²Ëµ¥×ó±ßµÄ¸½¼ÓÌõ
¡¡¡¡Dim RedArea As Long, GreenArea As Long, BlueArea As Long
¡¡¡¡Dim red As Long, green As Long, blue As Long
¡¡¡¡Select Case BarStyle
¡¡¡¡¡¡Case LBS_NONE ' ÎÞ¸½¼ÓÌõ
¡¡¡¡
¡¡¡¡¡¡Case LBS_SOLIDCOLOR ' ʵɫÌî³ä
¡¡¡¡¡¡¡¡hBrush = CreateSolidBrush(BarStartColor)
¡¡¡¡¡¡¡¡FillRect .hdc, barRect, hBrush
¡¡¡¡¡¡¡¡DeleteObject hBrush
¡¡¡¡¡¡Case LBS_HORIZONTALCOLOR ' ˮƽ¹ý¶ÉÉ«
¡¡¡¡¡¡¡¡BlueArea = Int(BarEndColor / &H10000) - Int(BarStartColor / &H10000)
¡¡¡¡¡¡¡¡GreenArea = (Int(BarEndColor / &H100) And &HFF) - (Int(BarStartColor / &H100) And &HFF)
¡¡¡¡¡¡¡¡RedArea = (BarEndColor And &HFF) - (BarStartColor And &HFF)

¡¡¡¡¡¡¡¡For i = 0 To BarWidth - 1
¡¡¡¡¡¡¡¡¡¡red = Int(BarStartColor And &HFF) + Int(i / BarWidth * RedArea)
¡¡¡¡¡¡¡¡¡¡green = (Int(BarStartColor / &H100) And &HFF) + Int(i / BarWidth * GreenArea)
¡¡¡¡¡¡¡¡¡¡blue = Int(BarStartColor / &H10000) + Int(i / BarWidth * BlueArea)
¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(PS_SOLID, 1, RGB(red, green, blue))
¡¡¡¡¡¡¡¡¡¡Call SelectObject(.hdc, hPen)
¡¡¡¡¡¡¡¡¡¡Call MoveToEx(.hdc, i, 0, 0)
¡¡¡¡¡¡¡¡¡¡Call LineTo(.hdc, i, barRect.Bottom)
¡¡¡¡¡¡¡¡¡¡Call DeleteObject(hPen)
¡¡¡¡¡¡¡¡Next i

¡¡¡¡¡¡Case LBS_VERTICALCOLOR ' ´¹Ö±¹ý¶ÉÉ«
¡¡¡¡¡¡¡¡BlueArea = Int(BarEndColor / &H10000) - Int(BarStartColor / &H10000)
¡¡¡¡¡¡¡¡GreenArea = (Int(BarEndColor / &H100) And &HFF) - (Int(BarStartColor / &H100) And &HFF)
¡¡¡¡¡¡¡¡RedArea = (BarEndColor And &HFF) - (BarStartColor And &HFF)

¡¡¡¡¡¡¡¡For i = 0 To barRect.Bottom
¡¡¡¡¡¡¡¡¡¡red = Int(BarStartColor And &HFF) + Int(i / (barRect.Bottom + 1) * ¡¡RedArea)
¡¡¡¡¡¡¡¡¡¡green = (Int(BarStartColor / &H100) And &HFF) + Int(i / (barRect.Bottom + 1) * GreenArea)
¡¡¡¡¡¡¡¡¡¡blue = Int(BarStartColor / &H10000) + Int(i / (barRect.Bottom + 1) * BlueArea)
¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(PS_SOLID, 1, RGB(red, green, blue))
¡¡¡¡¡¡¡¡¡¡Call SelectObject(.hdc, hPen)
¡¡¡¡¡¡¡¡¡¡Call MoveToEx(.hdc, 0, i, 0)
¡¡¡¡¡¡¡¡¡¡Call LineTo(.hdc, barRect.Right, i)
¡¡¡¡¡¡¡¡¡¡Call DeleteObject(hPen)
¡¡¡¡¡¡¡¡Next i

¡¡¡¡¡¡Case LBS_IMAGE ' ͼÏñ

¡¡¡¡¡¡¡¡If BarImage.Handle <> 0 Then
¡¡¡¡¡¡¡¡¡¡Dim barhDC As Long
¡¡¡¡¡¡¡¡¡¡barhDC = CreateCompatibleDC(GetDC(0))
¡¡¡¡¡¡¡¡¡¡SelectObject barhDC, BarImage.Handle
¡¡¡¡¡¡¡¡¡¡BitBlt .hdc, 0, 0, BarWidth, barRect.Bottom - barRect.Top + 1, barhDC, 0, 0, vbSrcCopy
¡¡¡¡¡¡¡¡¡¡DeleteDC barhDC
¡¡¡¡¡¡¡¡End If

¡¡¡¡¡¡End Select

¡¡¡¡' »­²Ëµ¥Ïî
¡¡¡¡If MyItemInfo(.itemID).itemType = MIT_SEPARATOR Then
¡¡¡¡¡¡' »­²Ëµ¥·Ö¸ôÌõ(MIT_SEPARATOR)
¡¡¡¡¡¡If MyItemInfo(.itemID).itemType = MIT_SEPARATOR Then
¡¡¡¡¡¡¡¡itemRect.Top = itemRect.Top + 2
¡¡¡¡¡¡¡¡itemRect.Bottom = itemRect.Top + 1
¡¡¡¡¡¡¡¡itemRect.Left = barRect.Right + 5
¡¡¡¡¡¡¡¡Select Case SepStyle
¡¡¡¡¡¡¡¡¡¡Case MSS_NONE ' ÎÞ·Ö¸ôÌõ

¡¡¡¡¡¡¡¡¡¡Case MSS_DEFAULT ' ĬÈÏÑùʽ
¡¡¡¡¡¡¡¡¡¡¡¡DrawEdge .hdc, itemRect, EDGE_ETCHED, BF_TOP
¡¡¡¡¡¡¡¡¡¡Case Else ' ÆäËü
¡¡¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(SepStyle, 0, SepColor)
¡¡¡¡¡¡¡¡¡¡¡¡hBrush = CreateSolidBrush(BkColor)
¡¡¡¡¡¡¡¡¡¡¡¡SelectObject .hdc, hPen
¡¡¡¡¡¡¡¡¡¡¡¡SelectObject .hdc, hBrush
¡¡¡¡¡¡¡¡¡¡¡¡Rectangle .hdc, itemRect.Left, itemRect.Top, itemRect.Right, itemRect.Bottom
¡¡¡¡¡¡¡¡¡¡¡¡DeleteObject hPen
¡¡¡¡¡¡¡¡¡¡¡¡DeleteObject hBrush
¡¡¡¡¡¡¡¡End Select
¡¡¡¡¡¡End If
¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡If Not CBool(MyItemInfo(.itemID).itemState And MIS_DISABLED) Then
¡¡¡¡¡¡¡¡' µ±²Ëµ¥Ïî¿ÉÓÃʱ
¡¡¡¡¡¡¡¡¡¡If .itemState And ODS_SELECTED Then ' µ±Êó±êÒƶ¯µ½²Ëµ¥Ïîʱ
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡' ÉèÖò˵¥Ïî¸ßÁÁ·¶Î§
¡¡¡¡¡¡¡¡¡¡¡¡If SelectScope And ISS_ICON_TEXT Then
¡¡¡¡¡¡¡¡¡¡¡¡¡¡itemRect.Left = iconRect.Left
¡¡¡¡¡¡¡¡¡¡¡¡ElseIf SelectScope And ISS_TEXT Then
¡¡¡¡¡¡¡¡¡¡¡¡¡¡itemRect.Left = textRect.Left - 2
¡¡¡¡¡¡¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡itemRect.Left = .rcItem.Left
¡¡¡¡¡¡¡¡¡¡¡¡End If

¡¡¡¡¡¡¡¡¡¡¡¡' ´¦Àí²Ëµ¥ÏîÎÞͼ±ê»òΪCHECKBOXʱµÄÇé¿ö
¡¡¡¡¡¡¡¡¡¡¡¡If (MyItemInfo(.itemID).itemType = MIT_CHECKBOX Or MyItemInfo(.itemID).itemIcon = 0) And SelectScope <> ISS_LEFTBAR_ICON_TEXT Then
¡¡¡¡¡¡¡¡¡¡¡¡¡¡itemRect.Left = iconRect.Left
¡¡¡¡¡¡¡¡¡¡¡¡End If

¡¡¡¡¡¡¡¡¡¡' »­²Ëµ¥Ïî±ß¿ò
¡¡¡¡¡¡¡¡Select Case EdgeStyle
¡¡¡¡¡¡¡¡¡¡Case ISES_NONE ' Îޱ߿ò

¡¡¡¡¡¡¡¡¡¡Case ISES_SUNKEN ' °¼½ø
¡¡¡¡¡¡¡¡¡¡¡¡DrawEdge .hdc, itemRect, BDR_SUNKENOUTER, BF_RECT
¡¡¡¡¡¡¡¡¡¡Case ISES_RAISED ' ͹Æð
¡¡¡¡¡¡¡¡¡¡¡¡DrawEdge .hdc, itemRect, BDR_RAISEDINNER, BF_RECT
¡¡¡¡¡¡¡¡¡¡Case Else ' ÆäËü
¡¡¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(EdgeStyle, 0, EdgeColor)
¡¡¡¡¡¡¡¡¡¡¡¡hBrush = CreateSolidBrush(BkColor)
¡¡¡¡¡¡¡¡¡¡¡¡SelectObject .hdc, hPen
¡¡¡¡¡¡¡¡¡¡¡¡SelectObject .hdc, hBrush
¡¡¡¡¡¡¡¡¡¡¡¡Rectangle .hdc, itemRect.Left, itemRect.Top, itemRect.Right, itemRect.Bottom
¡¡¡¡¡¡¡¡¡¡¡¡DeleteObject hPen
¡¡¡¡¡¡¡¡¡¡¡¡DeleteObject hBrush
¡¡¡¡¡¡¡¡End Select

¡¡¡¡¡¡' »­²Ëµ¥Ïî±³¾°
¡¡¡¡¡¡InflateRect itemRect, -1, -1
¡¡¡¡¡¡Select Case FillStyle
¡¡¡¡¡¡¡¡Case ISFS_NONE ' ÎÞ±³¾°
¡¡
¡¡¡¡¡¡¡¡Case ISFS_HORIZONTALCOLOR ' ˮƽ½¥±äÉ«
¡¡¡¡¡¡¡¡¡¡BlueArea = Int(FillEndColor / &H10000) - Int(FillStartColor / &H10000)
¡¡¡¡¡¡¡¡¡¡GreenArea = (Int(FillEndColor / &H100) And &HFF) - (Int(FillStartColor / &H100) And &HFF)
¡¡¡¡¡¡¡¡¡¡RedArea = (FillEndColor And &HFF) - (FillStartColor And &HFF)

¡¡¡¡¡¡¡¡¡¡For i = itemRect.Left To itemRect.Right - 1
¡¡¡¡¡¡¡¡¡¡¡¡red = Int(FillStartColor And &HFF) + Int((i - itemRect.Left) / (itemRect.Right - itemRect.Left + 1) * RedArea)
¡¡¡¡¡¡¡¡¡¡¡¡green = (Int(FillStartColor / &H100) And &HFF) + Int((i - itemRect.Left) / (itemRect.Right - itemRect.Left + 1) * GreenArea)
¡¡¡¡¡¡¡¡¡¡¡¡blue = Int(FillStartColor / &H10000) + Int((i - itemRect.Left) / (itemRect.Right - itemRect.Left + 1) * BlueArea)
¡¡¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(PS_SOLID, 1, RGB(red, green, blue))
Call SelectObject(.hdc, hPen)
¡¡¡¡¡¡¡¡¡¡¡¡Call MoveToEx(.hdc, i, itemRect.Top, 0)
¡¡¡¡¡¡¡¡¡¡¡¡Call LineTo(.hdc, i, itemRect.Bottom)
¡¡¡¡¡¡¡¡¡¡¡¡Call DeleteObject(hPen)
¡¡¡¡¡¡¡¡¡¡Next i

¡¡¡¡¡¡¡¡Case ISFS_VERTICALCOLOR ' ´¹Ö±½¥±äÉ«
¡¡¡¡¡¡¡¡¡¡BlueArea = Int(FillEndColor / &H10000) - Int(FillStartColor / &H10000)
¡¡¡¡¡¡¡¡¡¡GreenArea = (Int(FillEndColor / &H100) And &HFF) - (Int(FillStartColor / &H100) And &HFF)
¡¡¡¡¡¡¡¡¡¡RedArea = (FillEndColor And &HFF) - (FillStartColor And &HFF)

¡¡¡¡¡¡¡¡¡¡For i = itemRect.Top To itemRect.Bottom - 1
¡¡¡¡¡¡¡¡¡¡¡¡red = Int(FillStartColor And &HFF) + Int((i - itemRect.Top) / (itemRect.Bottom - itemRect.Top + 1) * RedArea)
¡¡¡¡¡¡¡¡¡¡¡¡green = (Int(FillStartColor / &H100) And &HFF) + Int((i - itemRect.Top) / (itemRect.Bottom - itemRect.Top + 1) * GreenArea)
¡¡¡¡¡¡¡¡¡¡¡¡blue = Int(FillStartColor / &H10000) + Int((i - itemRect.Top) / (itemRect.Bottom - itemRect.Top + 1) * BlueArea)
¡¡¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(PS_SOLID, 1, RGB(red, green, blue))
¡¡¡¡¡¡¡¡¡¡¡¡Call SelectObject(.hdc, hPen)
¡¡¡¡¡¡¡¡¡¡¡¡Call MoveToEx(.hdc, itemRect.Left, i, 0)
¡¡¡¡¡¡¡¡¡¡¡¡Call LineTo(.hdc, itemRect.Right, i)
¡¡¡¡¡¡¡¡¡¡¡¡Call DeleteObject(hPen)
¡¡¡¡¡¡¡¡¡¡Next i

¡¡¡¡¡¡¡¡Case ISFS_SOLIDCOLOR ' ʵɫÌî³ä
¡¡¡¡¡¡¡¡¡¡hPen = CreatePen(PS_SOLID, 0, FillStartColor)
¡¡¡¡¡¡¡¡¡¡hBrush = CreateSolidBrush(FillStartColor)
¡¡¡¡¡¡¡¡¡¡SelectObject .hdc, hPen
¡¡¡¡¡¡¡¡¡¡SelectObject .hdc, hBrush
¡¡¡¡¡¡¡¡¡¡Rectangle .hdc, itemRect.Left, itemRect.Top, itemRect.Right, itemRect.Bottom
¡¡¡¡¡¡¡¡¡¡DeleteObject hPen
¡¡¡¡¡¡¡¡¡¡DeleteObject hBrush
¡¡¡¡¡¡End Select

¡¡¡¡¡¡' »­²Ëµ¥ÏîÎÄ×Ö
¡¡¡¡¡¡SetTextColor .hdc, TextSelectColor
¡¡¡¡¡¡DrawText .hdc, MyItemInfo(.itemID).itemText, -1, textRect, DT_SINGLELINE Or DT_LEFT Or DT_VCENTER

¡¡¡¡¡¡' »­²Ëµ¥Ïîͼ±ê
¡¡¡¡¡¡If MyItemInfo(.itemID).itemType <> MIT_CHECKBOX Then
¡¡¡¡¡¡¡¡DrawIconEx .hdc, iconRect.Left + 2, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2, MyItemInfo(.itemID).itemIcon, 16, 16, 0, 0, DI_NORMAL
¡¡¡¡¡¡¡¡Select Case IconStyle
¡¡¡¡¡¡¡¡¡¡Case IIS_NONE ' ÎÞЧ¹û

¡¡¡¡¡¡¡¡¡¡Case IIS_SUNKEN ' °¼½ø
¡¡¡¡¡¡¡¡¡¡¡¡If MyItemInfo(.itemID).itemIcon <> 0 Then
¡¡¡¡¡¡¡¡¡¡¡¡¡¡DrawEdge .hdc, iconRect, BDR_SUNKENOUTER, BF_RECT
¡¡¡¡¡¡¡¡¡¡¡¡End If
¡¡¡¡¡¡¡¡¡¡Case IIS_RAISED ' ͹Æð
¡¡¡¡¡¡¡¡¡¡¡¡If MyItemInfo(.itemID).itemIcon <> 0 Then
¡¡¡¡¡¡¡¡¡¡¡¡¡¡DrawEdge .hdc, iconRect, BDR_RAISEDINNER, BF_RECT
¡¡¡¡¡¡¡¡¡¡¡¡End If
¡¡¡¡¡¡¡¡¡¡Case IIS_SHADOW ' ÒõÓ°
¡¡¡¡¡¡¡¡¡¡¡¡hBrush = CreateSolidBrush(RGB(128, 128, 128))
¡¡¡¡¡¡¡¡¡¡¡¡DrawState .hdc, hBrush, 0, MyItemInfo(.itemID).itemIcon, 0, iconRect.Left + 3, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2 + 1, 0, 0, DST_ICON Or DSS_MONO
¡¡¡¡¡¡¡¡¡¡¡¡DeleteObject hBrush
¡¡¡¡¡¡¡¡¡¡¡¡DrawIconEx .hdc, iconRect.Left + 1, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2 - 1, MyItemInfo(.itemID).itemIcon, 16, 16, 0, 0, DI_NORMAL
¡¡¡¡¡¡¡¡End Select
¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡' CHECKBOXÐͲ˵¥Ïîͼ±êЧ¹û
¡¡¡¡¡¡¡¡If MyItemInfo(.itemID).itemState And MIS_CHECKED Then
¡¡¡¡¡¡¡¡¡¡DrawIconEx .hdc, iconRect.Left + 2, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2, MyItemInfo(.itemID).itemIcon, 16, 16, 0, 0, DI_NORMAL
¡¡¡¡¡¡¡¡End If
¡¡¡¡¡¡End If

¡¡¡¡Else ' µ±Êó±êÒÆ¿ª²Ëµ¥Ïîʱ

¡¡¡¡¡¡' »­²Ëµ¥Ïî±ß¿òºÍ±³¾°(Çå³ý)
¡¡¡¡¡¡If BarStyle <> LBS_NONE Then
¡¡¡¡¡¡¡¡itemRect.Left = barRect.Right + 1
¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡itemRect.Left = 0
¡¡¡¡¡¡End If
¡¡¡¡¡¡hBrush = CreateSolidBrush(BkColor)
¡¡¡¡¡¡FillRect .hdc, itemRect, hBrush
¡¡¡¡¡¡DeleteObject hBrush

¡¡¡¡¡¡' »­²Ëµ¥ÏîÎÄ×Ö
¡¡¡¡¡¡SetTextColor .hdc, TextEnabledColor
¡¡¡¡¡¡DrawText .hdc, MyItemInfo(.itemID).itemText, -1, textRect, DT_SINGLELINE Or DT_LEFT Or DT_VCENTER

¡¡¡¡¡¡' »­²Ëµ¥Ïîͼ±ê
¡¡¡¡¡¡If MyItemInfo(.itemID).itemType <> MIT_CHECKBOX Then
¡¡¡¡¡¡¡¡DrawIconEx .hdc, iconRect.Left + 2, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2, MyItemInfo(.itemID).itemIcon, 16, 16, 0, 0, DI_NORMAL
¡¡¡¡¡¡Else
¡¡¡¡¡¡¡¡If MyItemInfo(.itemID).itemState And MIS_CHECKED Then
¡¡¡¡¡¡¡¡¡¡DrawIconEx .hdc, iconRect.Left + 2, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2, MyItemInfo(.itemID).itemIcon, 16, 16, 0, 0, DI_NORMAL
¡¡¡¡¡¡End If
¡¡¡¡End If

¡¡End If
¡¡Else ' µ±²Ëµ¥Ïî²»¿ÉÓÃʱ

¡¡¡¡' »­²Ëµ¥ÏîÎÄ×Ö
¡¡¡¡SetTextColor .hdc, TextDisabledColor
¡¡¡¡DrawText .hdc, MyItemInfo(.itemID).itemText, -1, textRect, DT_SINGLELINE Or DT_LEFT Or DT_VCENTER

¡¡¡¡' »­²Ëµ¥Ïîͼ±ê
¡¡¡¡If MyItemInfo(.itemID).itemType <> MIT_CHECKBOX Then
¡¡¡¡¡¡DrawState .hdc, 0, 0, MyItemInfo(.itemID).itemIcon, 0, iconRect.Left + 2, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2, 0, 0, DST_ICON Or DSS_DISABLED
¡¡¡¡Else
¡¡¡¡¡¡If MyItemInfo(.itemID).itemState And MIS_CHECKED Then
¡¡¡¡¡¡¡¡DrawState .hdc, 0, 0, MyItemInfo(.itemID).itemIcon, 0, iconRect.Left + 2, iconRect.Top + (iconRect.Bottom - iconRect.Top + 1 - 16) / 2, 0, 0, DST_ICON Or DSS_DISABLED
¡¡¡¡End If
¡¡End If

¡¡End If
End If

End With
End If
End Sub

' ²Ëµ¥ÏîʼþÏìÓ¦(µ¥»÷²Ëµ¥Ïî)
Private Sub MenuItemSelected(ByVal itemID As Long)
Debug.Print "Êó±êµ¥»÷ÁË£º" & MyItemInfo(itemID).itemText
Select Case MyItemInfo(itemID).itemAlias
Case "exit"
Dim frm As Form
For Each frm In Forms
Unload frm
Next
End Select
End Sub

' ²Ëµ¥ÏîʼþÏìÓ¦(Ñ¡Ôñ²Ëµ¥Ïî)
Private Sub MenuItemSelecting(ByVal itemID As Long)
Debug.Print "Êó±êÒƶ¯µ½£º" & MyItemInfo(itemID).itemText
End Sub

¡¡¡¡µ½´ËΪֹ£¬ÎÒÃǾÍÍê³ÉÁ˲˵¥ÀàµÄ±àд£¬ÇÒ»¹°üÀ¨Ò»¸ö²âÊÔ´°Ìå¡£ÏÖÔÚ£¬ÍêÕûµÄ¹¤³ÌÀïÓ¦¸Ã°üÀ¨Á½¸ö´°Ì壺frmMainºÍfrmMenu£»Ò»¸ö±ê׼ģ¿é£ºmMenu£»Ò»¸öÀàÄ£¿é£ºcMenu¡£°´F5±àÒëÔËÐÐһϣ¬ÔÚ´°Ìå¿Õ°×´¦µ¥»÷Êó±êÓÒ¼ü¡£ÔõôÑù£¬³öÏÖµ¯³öʽ²Ëµ¥ÁËÂ𣿻»¸ö·ç¸ñÔÙÊÔÊÔ¡£

¡¡¡¡¿´ÍêÕâƪÎÄÕºó£¬ÎÒÏëÄãÓ¦¸ÃÒѾ­¶Ô²ÉÓÃÎïÖ÷»æͼ¼¼ÊõµÄ×Ô»æ²Ëµ¥ÓÐÁËÒ»¶¨µÄÁ˽⣬ÔÙ¿´¿´MS Office 2003µÄ²Ëµ¥£¬ÆäʵҲûʲôÄѵÄÂï¡£

¡¡¡¡±¾ÎijÌÐòÔÚWindows XP¡¢VB6ϵ÷ÊÔͨ¹ý¡£

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章