📄 modmenus.bas
字号:
ntmAveWidth As Long
End Type
Private Type MEASUREITEMSTRUCT ' used when owner drawn items are first measured
CtlType As Long
CtlID As Long
ItemID As Long
ItemWidth As Long
ItemHeight As Long
ItemData As Long
End Type
Public Type MENUITEMINFO ' used to retrieve/store menu items
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 Long 'String
cch As Long
End Type
Private Type NONCLIENTMETRICS ' used to retrieve/set system settings
cbSize As Long
iBorderWidth As Long
iScrollWidth As Long
iScrollHeight As Long
iCaptionWidth As Long
iCaptionHeight As Long
lfCaptionFont As LOGFONT
iSMCaptionWidth As Long
iSMCaptionHeight As Long
lfSMCaptionFont As LOGFONT
iMenuWidth As Long
iMenuHeight As Long
lfMenuFont As LOGFONT
lfStatusFont As LOGFONT
lfMessageFont As LOGFONT
End Type
Private Type OSVERSIONINFO ' used to help identify operating system
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Type SHFILEINFO ' used to extract icon for files list menus
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * 255
szTypeName As String * 80
End Type
Public Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
' =====================================================================
' Custom TYPE Declarations used
' =====================================================================
Public Type MenuComponentData
Caption As String ' original caption of a owner-drawn converted menu item
Display As String ' the caption to display (without hotkeys and codes)
Cached As String ' optional listbox type menu caption
HotKey As String ' the hotkey to display
Tip As String ' the tip to display
Dimension As POINTAPI ' height and width of the menu item
OffsetCx As Integer ' compensation of menu item width to force to appear standard across O/S's
ID As Long ' the menu item unique ID
Index As Integer ' the menu item zero-based position on its submenu
Icon As String ' handle to an image to display for a menu item
ShowBKG As Boolean ' flag indicating to not make a bitmap menu image transparent (bitmaps only)
ControlType As Byte ' 0=combo box;1=list box;2=multiselect listbox
hControl As Long ' hWnd reference to a list/combo box if needed
gControl As Long ' same as above, but only referenced in child classes (see cMenuItems)
Status As Integer ' various attributes of a menu item. Currently, ...
'2=Separator,4=Disabled,8=Checked,16=Default,32=Raised Sep Bar,
'64=Sidebar,128=Sidebar Hidden,512=hasSubmenus
'1024=CustomMenu,2048=ColorMenu,4096=FontMenu,8192=Reserved
End Type
Public Type PanelData ' each submenu gets a PanelData structure filled
HasIcons As Boolean ' indication panel has icons. Needed for checkmark styles
IsSystem As Boolean ' indication panel is for a system menu. Used to draw system menu icons
PanelIcon As Long ' handle to image to display as a sidebar
SidebarMenuItem As Long ' reference to menu item ID that is the sidebar
SubmenuID As Long ' reference to which submenu panel belongs to
Hourglass As Boolean
Accelerators As String
End Type
' =====================================================================
' Standard CONSTANTS as Constants or Enumerators
' =====================================================================
' //////////// Color constants. \\\\\\\\\\\\\\
Private Const COLOR_ACTIVEBORDER = 10
Private Const COLOR_ACTIVECAPTION = 2
Private Const COLOR_ADJ_MAX = 100
Private Const COLOR_ADJ_MIN = -100
Private Const COLOR_APPWORKSPACE = 12
Private Const COLOR_BACKGROUND = 1
Private Const COLOR_BTNFACE = 15
Private Const COLOR_BTNHIGHLIGHT = 20
Private Const COLOR_BTNLIGHT = 22
Private Const COLOR_BTNSHADOW = 16
Private Const COLOR_BTNTEXT = 18
Private Const COLOR_CAPTIONTEXT = 9
Private Const COLOR_GRAYTEXT = 17
Private Const COLOR_HIGHLIGHT = 13
Private Const COLOR_HIGHLIGHTTEXT = 14
Private Const COLOR_INACTIVEBORDER = 11
Private Const COLOR_INACTIVECAPTION = 3
Private Const COLOR_INACTIVECAPTIONTEXT = 19
Public Const COLOR_MENU = 4
Private Const COLOR_MENUTEXT = 7
Private Const COLOR_SCROLLBAR = 0
Private Const COLOR_WINDOW = 5
Private Const COLOR_WINDOWFRAME = 6
Private Const COLOR_WINDOWTEXT = 8
Public Const NEWTRANSPARENT = 3 'use with SetBkMode()
Private Const WHITENESS = &HFF0062
' //////////// Custom Colors \\\\\\\\\\\\\\\\\
Public Const vbMaroon = 128
Public Const vbOlive = 32896
Public Const vbNavy = 8388608
Public Const vbPurple = 8388736
Public Const vbTeal = 8421376
Public Const vbGray = 8421504
Public Const vbSilver = 12632256
Public Const vbViolet = 9445584
Public Const vbOrange = 42495
Public Const vbGold = 43724 '55295
Public Const vbIvory = 15794175
Public Const vbPeach = 12180223
Public Const vbTurquoise = 13749760
Public Const vbTan = 9221330
Public Const vbBrown = 17510
' //////////// DrawText API Constants \\\\\\\\\\\\\\
Public Const DT_CALCRECT = &H400
Public Const DT_CENTER = &H1
Public Const DT_HIDEPREFIX As Long = &H100000
Public Const DT_LEFT = &H0
Public Const DT_MULTILINE = (&H1)
Public Const DT_NOCLIP = &H100
Public Const DT_NOPREFIX = &H800
Public Const DT_RIGHT = &H2
Public Const DT_SINGLELINE = &H20
Public Const DT_VCENTER As Long = &H4
Public Const DT_WORDBREAK = &H10
' //////////// General Window messages or styles \\\\\\\\\\\\\\
Private Const WM_USER As Long = &H400
Private Const GW_CHILD = 5
Private Const GWL_WNDPROC = (-4) ' current window procedure for hWnd
Public Const GWL_STYLE = -16 ' current window style for hWnd
Private Const GWL_EXSTYLE = -20 ' current extended window style for hWnd
Public Const GWL_ID = -12 ' current control ID for child window
Private Const TBN_FIRST = (-700&)
Private Const TBN_DROPDOWN = (TBN_FIRST - 10)
Private Const TB_SETSTYLE = (WM_USER + 56)
Private Const TBSTYLE_CUSTOMERASE = &H2000
Private Const TB_GETRECT = (WM_USER + 51)
Private Const WM_ACTIVATE As Long = &H6
Public Const WM_COMMAND As Long = &H111
Private Const WM_DESTROY = &H2
Private Const WM_DRAWITEM = &H2B
Private Const WM_ENTERIDLE = &H121
Private Const WM_ENTERMENULOOP = &H211
Private Const WM_EXITMENULOOP = &H212
Private Const WM_GETMINMAXINFO As Long = &H24&
Private Const WA_INACTIVE As Long = 0
Private Const WM_INITMENU = &H116
Private Const WM_INITMENUPOPUP = &H117
Private Const WM_MDIACTIVATE = &H222
Private Const WM_MDIDESTROY As Long = &H221
Private Const WM_MDIGETACTIVE As Long = &H229
Private Const WM_MDIMAXIMIZE As Long = &H225
Private Const WM_MEASUREITEM = &H2C
Private Const WM_MENUCHAR = &H120
Private Const WM_MENUCOMMAND As Long = &H126
Private Const WM_MENUSELECT As Long = &H11F
Private Const WM_SETFOCUS As Long = &H7
Private Const WS_EX_MDICHILD = &H40&
Private Const WM_KEYUP As Long = &H101
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN As Long = &H104
Private Const WM_SYSKEYUP As Long = &H105
' //////////// Menu-Related Constants \\\\\\\\\\\\\\
Public Const MF_CHANGE As Long = &H80&
Public Const MF_CHECKED As Long = &H8&
Public Const MF_DEFAULT As Long = &H1000&
Public Const MF_DISABLED As Long = &H2&
Public Const MF_GRAYED As Long = &H1&
Private Const MF_HILITE = &H80&
Public Const MF_MENUBARBREAK As Long = &H20&
Public Const MF_MENUBREAK As Long = &H40&
Private Const MF_MOUSESELECT = &H8000&
Public Const MF_OWNERDRAW = &H100
Public Const MF_POPUP As Long = &H10&
Public Const MF_SEPARATOR = &H800
Public Const MIIM_DATA = &H20
Public Const MIIM_ID As Long = &H2
Public Const MIIM_STATE As Long = &H1
Public Const MIIM_SUBMENU As Long = &H4
Public Const MIIM_TYPE = &H10
Private Const MNC_EXECUTE = 2
Private Const MNC_IGNORE = 0
Private Const MNC_SELECT = 3
Private Const ODA_DRAWENTIRE As Long = &H1
Private Const ODT_MENU = 1
Private Const ODS_SELECTED = &H1
Private Const TPM_RETURNCMD As Long = &H100&
Private Const TPM_NONOTIFY As Long = &H80&
Private Const TPM_LEFTALIGN = &H0&
Private Const TPM_VERTICAL = &H40&
Private Const TPM_LEFTBUTTON = &H0&
' System Menu items that will have their icons manually redrawn
Public Const SC_CLOSE = &HF060
Public Const SC_MINIMIZE = &HF020
Public Const SC_MAXIMIZE = &HF030
Public Const SC_RESTORE = &HF120
' Miscellaneous
Public Const RASTER_FONTTYPE As Long = &H1
Public Const TRUETYPE_FONTTYPE As Long = &H4
Private Const SPI_GETWORKAREA = 48
Private Const SHGFI_ICON = &H100
Private Const SHGFI_SMALLICON = &H1
Private Const SHGFI_USEFILEATTRIBUTES = &H10
Private Const VK_SHIFT As Long = &H10
Private Const VK_CONTROL As Long = &H11
Private Const VK_MENU As Long = &H12
' =====================================================================
' Custom CONSTANTS as Constants or Enumerators
' =====================================================================
' ////////////// Used to keep track of owner drawn menu item attributes \\\\\\\\\\\\\\
' Ref custom Type MenuComponentData above
Public Const lv_mSep As Integer = 2
Public Const lv_mDisabled As Integer = 4
Public Const lv_mChk As Integer = 8
Public Const lv_mDefault As Integer = 16
Public Const lv_mSepRaised As Integer = 32
Public Const lv_mSBar As Integer = 64
Public Const lv_mSBarHidden As Integer = 128
Public Const lv_mSubmenu As Integer = 512
Public Const lv_mCustom As Integer = 1024
Public Const lv_mColor As Integer = 2048
Public Const lv_mFont As Integer = 4096
' ////////////// Used for functions to format menu captions \\\\\\\\\\\\\\
Public Enum MenuImageType
lv_ImgListIndex = 0
lv_ImgHandle = 1
lv_ImgControl = 2
End Enum
Public Enum MenuCtrlType
lv_ListBox = 1
lv_ComboBox = 2
End Enum
Public Enum MenuCaptionProps
lv_Caption = 0
lv_ImgID = 1
lv_Bold = 2
lv_Tip = 3
lv_ListBoxID = 4
lv_ComboxID = 5
lv_ShowIconBkg = 6
lv_HotKey = 7
lv_FilesPath = 8
End Enum
Public Enum SidebarTextProps
lv_txtText = 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -