MenuApi.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:13k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mMenuApi"
  2. '---------------------------------------------------------------------------------------
  3. ' Module    : mMenuApi
  4. ' DateTime  : 2005-4-19 19:02
  5. ' Author    : Lingll
  6. ' Purpose   :
  7. '---------------------------------------------------------------------------------------
  8. Option Explicit
  9. '== 菜单 =======================================
  10. '-= 取得ID =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  11. 'GetMenu          取得窗口中一个菜单的句柄。返回值:Long,依附于指定窗口的一个菜单的句柄(如果有菜单);否则返回零。
  12. 'GetSubMenu       取得一个弹出式菜单的句柄,它位于菜单中指定的位置。返回值:Long,位于指定位置的弹出式菜单的句柄(如果有的话);否则返回零
  13. Public Declare Function GetMenuInfo Lib "user32.dll" (ByVal hMenu As Long, ByRef LPMENUINFO As MENUINFO) As Long
  14. Public Declare Function SetMenuInfo Lib "user32.dll" (ByVal hMenu As Long, ByRef LPCMENUINFO As MENUINFO) As Long
  15. Public Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
  16. Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
  17. Public Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, ByRef lpcMenuItemInfo As MENUITEMINFO) As Long
  18. Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
  19. Public Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
  20. Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
  21. Public Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
  22. Public Declare Function CreatePopupMenu Lib "user32" () As Long
  23. Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
  24. Public Declare Function CreateMenu Lib "user32" () As Long
  25. Public Declare Function SetMenu Lib "user32" (ByVal hWnd As Long, ByVal hMenu As Long) As Long
  26. Public Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
  27. Public Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
  28. 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
  29. Public Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
  30. Public Declare Function CheckMenuItem Lib "user32" (ByVal hMenu As Long, ByVal wIDCheckItem As Long, ByVal wCheck As Long) As Long
  31. Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
  32. Public Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
  33. Public Declare Function IsMenu Lib "user32" (ByVal hMenu As Long) As Long
  34. Public Declare Function MenuItemFromPoint Lib "user32" (ByVal hWnd As Long, ByVal hMenu As Long, ByVal ptX As Long, ByVal ptY As Long) As Long
  35. Public Declare Function GetMenuItemRect Lib "user32.dll" (ByVal hWnd As Long, ByVal hMenu As Long, ByVal uItem As Long, ByRef lprcItem As RECT) As Long
  36. '-= 属性 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  37. 'GetMenuItemInfo    用一个MENUITEMINFO结构取得(接收)与一个菜单条目有关的特定信息。返回值:Long,TRUE(非零)表示成功,否则返回零。
  38. 'SetMenuItemInfo    为一个菜单条目设置指定的信息,具体信息保存于MENUITEMINFO结构中。返回值:Long,TRUE(非零)表示成功,否则返回零。
  39. Public Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFO) As Long
  40. Public Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long
  41. '-- ODS_ ---------------------------------------
  42. Public Const ODS_SELECTED = &H1 '菜单被选择
  43. Public Const ODS_GRAYED = &H2   '灰色字
  44. Public Const ODS_DISABLED = &H4 '禁用
  45. Public Const ODS_CHECKED = &H8  '选中
  46. Public Const ODS_FOCUS = &H10   '聚焦
  47. '-= ODT_ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  48. Public Const ODT_MENU = 1
  49. Public Const ODT_LISTBOX = 2
  50. Public Const ODT_COMBOBOX = 3
  51. Public Const ODT_BUTTON = 4
  52. '-- MF_ ----------------------------------------
  53. Public Const MF_BYCOMMAND = &H0&         '菜单条目由菜单的命令ID指定
  54. Public Const MF_BYPOSITION = &H400&      '菜单条目由条目在菜单中的位置决定。零代表菜单中的第一个条目
  55. Public Const MF_CHECKED = &H8&           '检查指定的菜单条目。不能与VB的Checked属性兼容
  56. Public Const MF_DISABLED = &H2&          '禁止指定的菜单条目。不与VB的Enabled属性兼容
  57. Public Const MF_ENABLED = &H0&           '允许指定的菜单条目。不与VB的Enabled属性兼容
  58. Public Const MF_GRAYED = &H1&            '禁止指定的菜单条目,并用浅灰色描述它。不与VB的Enabled属性兼容
  59. Public Const MF_HILITE = &H80&
  60. Public Const MF_SEPARATOR = &H800&       '在指定的条目处显示一条分隔线
  61. Public Const MF_STRING = &H0&            '在指定的条目处放置一个字串。不与VB的Caption属性兼容
  62. Public Const MF_UNCHECKED = &H0&         '检查指定的条目。不能与VB的Checked属性兼容
  63. Public Const MF_UNHILITE = &H0&
  64. Public Const MF_BITMAP = &H4&            '菜单条目是一幅位图。一旦设入菜单,这幅位图就绝对不能删除。所以不应该使用由VB的Image属性返回的值
  65. Public Const MF_OWNERDRAW = &H100&       '创建一个物主绘图菜单(由您设计的程序负责描绘每个菜单条目)
  66. Public Const MF_USECHECKBITMAPS = &H200&
  67. Public Const MF_MENUBARBREAK = &H20&     '在弹出式菜单中,将指定的条目放置于一个新列,并用一条垂直线分隔不同的列
  68. Public Const MF_MENUBREAK = &H40&        '在弹出式菜单中,将指定的条目放置于一个新列。在顶级菜单中,将条目放置到一个新行
  69. Public Const MF_POPUP = &H10&            '将一个弹出式菜单置于指定的条目。可用于创建子菜单及弹出式菜单
  70. Public Const MF_HELP = &H4000&
  71. Public Const MF_DEFAULT = &H1000
  72. Public Const MF_RIGHTJUSTIFY = &H4000
  73. '-- MIIM_ -------------------------------------
  74. Public Const MIIM_STATE = &H1&     '设置或取得 fState                       | Sets or gets the fState field
  75. Public Const MIIM_ID = &H2         '设置或取得 wID                          | Sets or gets the wID field
  76. Public Const MIIM_SUBMENU = &H4    '设置或取得 hSubMenu                     | Sets or gets the hSubMenu field
  77. Public Const MIIM_CHECKMARKS = &H8 '设置或取得 hbmpChecked 与 hbmpUnchecked | Sets or gets the hbmpChecked and hbmpUnchecked fields
  78. Public Const MIIM_TYPE = &H10      '设置或取得 fType 与 dwTypeData          | Sets or gets the fType and dwTypeData fields
  79. Public Const MIIM_DATA = &H20      '设置或取得 dwItemData                   | Sets or gets the dwItemData field
  80. Public Const MIIM_STRING = &H40
  81. Public Const MIIM_BITMAP = &H80
  82. Public Const MIIM_FTYPE = &H100
  83. '-- MFT_ ---------------------------------------
  84. Public Const MFT_STRING = MF_STRING
  85. Public Const MFT_BITMAP = MF_BITMAP
  86. Public Const MFT_MENUBARBREAK = MF_MENUBARBREAK
  87. Public Const MFT_MENUBREAK = MF_MENUBREAK
  88. Public Const MFT_OWNERDRAW = MF_OWNERDRAW
  89. Public Const MFT_RADIOCHECK = &H200
  90. Public Const MFT_SEPARATOR = MF_SEPARATOR
  91. Public Const MFT_RIGHTORDER = &H2000
  92. Public Const MFT_RIGHTJUSTIFY = MF_RIGHTJUSTIFY
  93. '-- MFS_ ---------------------------------------
  94. Public Const MFS_GRAYED = MF_GRAYED
  95. Public Const MFS_DISABLED = MF_DISABLED
  96. Public Const MFS_CHECKED = MF_CHECKED
  97. Public Const MFS_HILITE = MF_HILITE
  98. Public Const MFS_ENABLED = MF_ENABLED
  99. Public Const MFS_UNCHECKED = MF_UNCHECKED
  100. Public Const MFS_UNHILITE = MF_UNHILITE
  101. Public Const MFS_DEFAULT = MF_DEFAULT
  102. 'Public Const MFS_MASK = &H108B
  103. 'Public Const MFS_HOTTRACKDRAWN = &H10000000
  104. 'Public Const MFS_CACHEDBMP = &H20000000
  105. 'Public Const MFS_BOTTOMGAPDROP = &H40000000
  106. 'Public Const MFS_TOPGAPDROP = &H80000000
  107. 'Public Const MFS_GAPDROP = &HC0000000
  108. Public Const MNS_NOTIFYBYPOS As Long = &H8000000
  109. Public Const MIM_STYLE As Long = &H10
  110. Public Const MIM_MENUDATA As Long = &H8
  111. Public Type MENUITEMINFO
  112.     cbSize As Long        '结构大小,通常为44字节
  113.     fMask As Long         '设置或取得某些参数,以 MIIM_ 开始的常量。
  114.     fType As Long         '类型,以 MFT_ 开始的常量。如:MFT_OWNERDRAW
  115.     fState As Long        '属性,以 MFS_ 开始的常量。如:MFS_CHECKED
  116.     wID As Long           '菜单的ID,高16位没有使用                         | Menu entry identifier. The high 16 bits are not used.
  117.     hSubMenu As Long      '是否有子菜单,若有为wID,否则为0                 | Handle to a pop-up menu if one is associated with the menu entry
  118.     hbmpChecked As Long   '选中图标的hBitMap
  119.     hbmpUnchecked As Long '非选中图标的hBitMap
  120.     dwItemData As Long    '这个项目关于用户定义的值                         | User-defined value associated with this entry.
  121.     dwTypeData As Long    '根据fType的值而定                                | Depends on the menu type
  122.     cch As Long           '如果fType为MFT_STRING,则为字符串的长度,否则为0 | Length of the menu string when MFT_STRING is specified. Zero for other menu types.
  123. End Type
  124. Public Type MENUINFO
  125.   cbSize As Long
  126.   fMask As Long
  127.   dwStyle As Long
  128.   cyMax  As Long
  129.   hbrBack As Long
  130.   dwContextHelpID As Long
  131.   dwMenuData As Long
  132. End Type
  133. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As NONCLIENTMETRICS, ByVal fuWinIni As Long) As Long
  134. Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
  135. Private Const LF_FACESIZE As Long = 32
  136. Private Const SPI_GETNONCLIENTMETRICS As Long = 41
  137. Private Type LOGFONT
  138.     lfHeight As Long
  139.     lfWidth As Long
  140.     lfEscapement As Long
  141.     lfOrientation As Long
  142.     lfWeight As Long
  143.     lfItalic As Byte
  144.     lfUnderline As Byte
  145.     lfStrikeOut As Byte
  146.     lfCharSet As Byte
  147.     lfOutPrecision As Byte
  148.     lfClipPrecision As Byte
  149.     lfQuality As Byte
  150.     lfPitchAndFamily As Byte
  151.     lfFaceName(1 To LF_FACESIZE) As Byte
  152. End Type
  153. Private Type NONCLIENTMETRICS
  154.     cbSize As Long
  155.     iBorderWidth As Long
  156.     iScrollWidth As Long
  157.     iScrollHeight As Long
  158.     iCaptionWidth As Long
  159.     iCaptionHeight As Long
  160.     lfCaptionFont As LOGFONT
  161.     iSMCaptionWidth As Long
  162.     iSMCaptionHeight As Long
  163.     lfSMCaptionFont As LOGFONT
  164.     iMenuWidth As Long
  165.     iMenuHeight As Long
  166.     lfMenuFont As LOGFONT
  167.     lfStatusFont As LOGFONT
  168.     lfMessageFont As LOGFONT
  169. End Type
  170. '---------------------------------------------------------------------------------------
  171. ' Procedure : SetMenuType
  172. ' DateTime  : 2005-4-19 19:10
  173. ' Author    : Lingll
  174. ' Purpose   : 设置menu类型
  175. '---------------------------------------------------------------------------------------
  176. Public Sub SetMenuType(hMenu&, iItem&, fByPosition As Long, typeMask&, typeVal&)
  177. Dim mInfo As MENUITEMINFO
  178. With mInfo
  179.     .cbSize = Len(mInfo)
  180.     .fMask = MIIM_FTYPE
  181. End With
  182. Call GetMenuItemInfo(hMenu, iItem, fByPosition, mInfo)
  183. mInfo.fMask = MIIM_FTYPE
  184. mInfo.fType = ((mInfo.fType Or typeMask) Xor typeMask) Or typeVal
  185. Call SetMenuItemInfo(hMenu, iItem, fByPosition, mInfo)
  186. End Sub
  187. '---------------------------------------------------------------------------------------
  188. ' Procedure : GetMenuItemHeight
  189. ' DateTime  : 2005-4-19 21:55
  190. ' Author    : Lingll
  191. ' Purpose   :
  192. '---------------------------------------------------------------------------------------
  193. Public Function GetMenuItemHeight() As Long
  194.     
  195.     Dim nm As NONCLIENTMETRICS
  196.     
  197.     nm.cbSize = Len(nm)
  198.     Call SystemParametersInfo(SPI_GETNONCLIENTMETRICS, nm.cbSize, nm, 0)
  199.     
  200.     If nm.iMenuHeight > 19 Then
  201.         GetMenuItemHeight = nm.iMenuHeight
  202.     Else
  203.         GetMenuItemHeight = 19
  204.     End If
  205. End Function
  206. '---------------------------------------------------------------------------------------
  207. ' Procedure : GetMenuParam
  208. ' DateTime  : 2005-8-3 12:07
  209. ' Author    : Lingll
  210. ' Purpose   :
  211. '---------------------------------------------------------------------------------------
  212. Public Function GetMenuParam(hMenu&) As Long
  213. Dim tMnuInfo As MENUINFO
  214. With tMnuInfo
  215.     .cbSize = Len(tMnuInfo)
  216.     .fMask = MIM_MENUDATA
  217.     Call GetMenuInfo(hMenu, tMnuInfo)
  218.     GetMenuParam = .dwMenuData
  219. End With
  220. End Function
  221. '---------------------------------------------------------------------------------------
  222. ' Procedure : SetMenuParam
  223. ' DateTime  : 2005-8-3 12:07
  224. ' Author    : Lingll
  225. ' Purpose   :
  226. '---------------------------------------------------------------------------------------
  227. Public Function SetMenuParam(hMenu&, vData&) As Boolean
  228. Dim tMnuInfo As MENUINFO
  229. With tMnuInfo
  230.     .cbSize = Len(tMnuInfo)
  231.     .fMask = MIM_MENUDATA
  232.     .dwMenuData = vData
  233. End With
  234. SetMenuParam = _
  235.     (SetMenuInfo(hMenu, tMnuInfo) <> 0)
  236. End Function