GuiMenu.au3 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100
  1. #include-once
  2. #include "MenuConstants.au3"
  3. #include "StructureConstants.au3"
  4. #include "WinAPIConv.au3"
  5. #include "WinAPIMisc.au3"
  6. #include "WinAPISysInternals.au3"
  7. ; #INDEX# =======================================================================================================================
  8. ; Title .........: Menu
  9. ; AutoIt Version : 3.3.14.5
  10. ; Language ......: English
  11. ; Description ...: Functions that assist with Menu control management.
  12. ; A menu is a list of items that specify options or groups of options (a submenu) for an application. Clicking a
  13. ; menu item opens a submenu or causes the application to carry out a command.
  14. ; Author(s) .....: Paul Campbell (PaulIA)
  15. ; ===============================================================================================================================
  16. ; #CONSTANTS# ===================================================================================================================
  17. Global Const $__MENUCONSTANT_OBJID_CLIENT = 0xFFFFFFFC
  18. ; ===============================================================================================================================
  19. ; #NO_DOC_FUNCTION# =============================================================================================================
  20. ; Not working/documented/implemented at this time
  21. ;
  22. ; _GUICtrlMenu_EndMenu
  23. ; ===============================================================================================================================
  24. ; #CURRENT# =====================================================================================================================
  25. ; _GUICtrlMenu_AddMenuItem
  26. ; _GUICtrlMenu_AppendMenu
  27. ; _GUICtrlMenu_CalculatePopupWindowPosition
  28. ; _GUICtrlMenu_CheckMenuItem
  29. ; _GUICtrlMenu_CheckRadioItem
  30. ; _GUICtrlMenu_CreateMenu
  31. ; _GUICtrlMenu_CreatePopup
  32. ; _GUICtrlMenu_DeleteMenu
  33. ; _GUICtrlMenu_DestroyMenu
  34. ; _GUICtrlMenu_DrawMenuBar
  35. ; _GUICtrlMenu_EnableMenuItem
  36. ; _GUICtrlMenu_FindItem
  37. ; _GUICtrlMenu_FindParent
  38. ; _GUICtrlMenu_GetItemBmp
  39. ; _GUICtrlMenu_GetItemBmpChecked
  40. ; _GUICtrlMenu_GetItemBmpUnchecked
  41. ; _GUICtrlMenu_GetItemChecked
  42. ; _GUICtrlMenu_GetItemCount
  43. ; _GUICtrlMenu_GetItemData
  44. ; _GUICtrlMenu_GetItemDefault
  45. ; _GUICtrlMenu_GetItemDisabled
  46. ; _GUICtrlMenu_GetItemEnabled
  47. ; _GUICtrlMenu_GetItemGrayed
  48. ; _GUICtrlMenu_GetItemHighlighted
  49. ; _GUICtrlMenu_GetItemID
  50. ; _GUICtrlMenu_GetItemInfo
  51. ; _GUICtrlMenu_GetItemRect
  52. ; _GUICtrlMenu_GetItemRectEx
  53. ; _GUICtrlMenu_GetItemState
  54. ; _GUICtrlMenu_GetItemStateEx
  55. ; _GUICtrlMenu_GetItemSubMenu
  56. ; _GUICtrlMenu_GetItemText
  57. ; _GUICtrlMenu_GetItemType
  58. ; _GUICtrlMenu_GetMenu
  59. ; _GUICtrlMenu_GetMenuBackground
  60. ; _GUICtrlMenu_GetMenuBarInfo
  61. ; _GUICtrlMenu_GetMenuContextHelpID
  62. ; _GUICtrlMenu_GetMenuData
  63. ; _GUICtrlMenu_GetMenuDefaultItem
  64. ; _GUICtrlMenu_GetMenuHeight
  65. ; _GUICtrlMenu_GetMenuInfo
  66. ; _GUICtrlMenu_GetMenuStyle
  67. ; _GUICtrlMenu_GetSystemMenu
  68. ; _GUICtrlMenu_InsertMenuItem
  69. ; _GUICtrlMenu_InsertMenuItemEx
  70. ; _GUICtrlMenu_IsMenu
  71. ; _GUICtrlMenu_LoadMenu
  72. ; _GUICtrlMenu_MapAccelerator
  73. ; _GUICtrlMenu_MenuItemFromPoint
  74. ; _GUICtrlMenu_RemoveMenu
  75. ; _GUICtrlMenu_SetItemBitmaps
  76. ; _GUICtrlMenu_SetItemBmp
  77. ; _GUICtrlMenu_SetItemBmpChecked
  78. ; _GUICtrlMenu_SetItemBmpUnchecked
  79. ; _GUICtrlMenu_SetItemChecked
  80. ; _GUICtrlMenu_SetItemData
  81. ; _GUICtrlMenu_SetItemDefault
  82. ; _GUICtrlMenu_SetItemDisabled
  83. ; _GUICtrlMenu_SetItemEnabled
  84. ; _GUICtrlMenu_SetItemGrayed
  85. ; _GUICtrlMenu_SetItemHighlighted
  86. ; _GUICtrlMenu_SetItemID
  87. ; _GUICtrlMenu_SetItemInfo
  88. ; _GUICtrlMenu_SetItemState
  89. ; _GUICtrlMenu_SetItemSubMenu
  90. ; _GUICtrlMenu_SetItemText
  91. ; _GUICtrlMenu_SetItemType
  92. ; _GUICtrlMenu_SetMenu
  93. ; _GUICtrlMenu_SetMenuBackground
  94. ; _GUICtrlMenu_SetMenuContextHelpID
  95. ; _GUICtrlMenu_SetMenuData
  96. ; _GUICtrlMenu_SetMenuDefaultItem
  97. ; _GUICtrlMenu_SetMenuHeight
  98. ; _GUICtrlMenu_SetMenuInfo
  99. ; _GUICtrlMenu_SetMenuStyle
  100. ; _GUICtrlMenu_TrackPopupMenu
  101. ; ===============================================================================================================================
  102. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  103. ; $tagMENUBARINFO
  104. ; $tagMDINEXTMENU
  105. ; $tagMENUGETOBJECTINFO
  106. ; $tagTPMPARAMS
  107. ; ===============================================================================================================================
  108. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  109. ; Name...........: $tagMENUBARINFO
  110. ; Description ...: tagMENUBARINFO structure
  111. ; Fields ........: Size - Specifies the size, in bytes, of the structure
  112. ; Left - Specifies the x coordinate of the upper left corner of the rectangle
  113. ; Top - Specifies the y coordinate of the upper left corner of the rectangle
  114. ; Right - Specifies the x coordinate of the lower right corner of the rectangle
  115. ; Bottom - Specifies the y coordinate of the lower right corner of the rectangle
  116. ; hMenu - Handle to the menu bar or popup menu
  117. ; hWndMenu - Handle to the menu bar or popup menu
  118. ; Focused - True if the item has focus
  119. ; Author ........: Paul Campbell (PaulIA)
  120. ; Remarks .......:
  121. ; ===============================================================================================================================
  122. Global Const $tagMENUBARINFO = "dword Size;" & $tagRECT & ";handle hMenu;handle hWndMenu;bool Focused"
  123. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  124. ; Name...........: $tagMDINEXTMENU
  125. ; Description ...: tagMDINEXTMENU structure
  126. ; Fields ........: hMenuIn - Receives a handle to the current menu
  127. ; hMenuNext - Specifies a handle to the menu to be activated
  128. ; hWndNext - Specifies a handle to the window to receive the menu notification messages
  129. ; Author ........: Paul Campbell (PaulIA)
  130. ; Remarks .......:
  131. ; ===============================================================================================================================
  132. Global Const $tagMDINEXTMENU = "handle hMenuIn;handle hMenuNext;hwnd hWndNext"
  133. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  134. ; Name...........: $tagMENUGETOBJECTINFO
  135. ; Description ...: tagMENUGETOBJECTINFO structure
  136. ; Fields ........: Flags - Position of the mouse cursor with respect to the item indicated by Pos. It can be one of the following
  137. ; +values.:
  138. ; |$MNGOF_BOTTOMGAP - Mouse is on the bottom of the item indicated by Pos
  139. ; |$MNGOF_TOPGAP - Mouse is on the top of the item indicated by Pos
  140. ; Pos - Position of the item the mouse cursor is on
  141. ; hMenu - Handle to the menu the mouse cursor is on
  142. ; RIID - Identifier of the requested interface. Currently it can only be IDropTarget.
  143. ; Obj - Pointer to the interface corresponding to the RIID member. This pointer is to be returned by the
  144. ; +application when processing the message.
  145. ; Author ........: Paul Campbell (PaulIA)
  146. ; Remarks .......: The tagMENUGETOBJECTINFO structure is used only in drag and drop menus. When the $WM_MENUGETOBJECT message is
  147. ; sent, lParam is a pointer to this structure. To create a drag and drop menu, call SetMenuInfo with
  148. ; $MNS_DRAGDROP set
  149. ; ===============================================================================================================================
  150. Global Const $tagMENUGETOBJECTINFO = "dword Flags;uint Pos;handle hMenu;ptr RIID;ptr Obj"
  151. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  152. ; Name...........: $tagTPMPARAMS
  153. ; Description ...: tagTPMPARAMS structure
  154. ; Fields ........: Size - Size of structure, in bytes
  155. ; Left - X position of upper left corner to exclude when positioing the window
  156. ; Top - Y position of upper left corner to exclude when positioing the window
  157. ; Right - X position of lower right corner to exclude when positioing the window
  158. ; Bottom - Y position of lower right corner to exclude when positioing the window
  159. ; Author ........: Paul Campbell (PaulIA)
  160. ; Remarks .......: All coordinates are in screen coordinates
  161. ; ===============================================================================================================================
  162. Global Const $tagTPMPARAMS = "uint Size;" & $tagRECT
  163. ; #FUNCTION# ====================================================================================================================
  164. ; Author ........: Paul Campbell (PaulIA)
  165. ; Modified.......:
  166. ; ===============================================================================================================================
  167. Func _GUICtrlMenu_AddMenuItem($hMenu, $sText, $iCmdID = 0, $hSubMenu = 0)
  168. Local $iIndex = _GUICtrlMenu_GetItemCount($hMenu)
  169. Local $tMenu = DllStructCreate($tagMENUITEMINFO)
  170. DllStructSetData($tMenu, "Size", DllStructGetSize($tMenu))
  171. DllStructSetData($tMenu, "ID", $iCmdID)
  172. DllStructSetData($tMenu, "SubMenu", $hSubMenu)
  173. If $sText = "" Then
  174. DllStructSetData($tMenu, "Mask", $MIIM_FTYPE)
  175. DllStructSetData($tMenu, "Type", $MFT_SEPARATOR)
  176. Else
  177. DllStructSetData($tMenu, "Mask", BitOR($MIIM_ID, $MIIM_STRING, $MIIM_SUBMENU))
  178. DllStructSetData($tMenu, "Type", $MFT_STRING)
  179. Local $tText = DllStructCreate("wchar Text[" & StringLen($sText) + 1 & "]")
  180. DllStructSetData($tText, "Text", $sText)
  181. DllStructSetData($tMenu, "TypeData", DllStructGetPtr($tText))
  182. EndIf
  183. Local $aResult = DllCall("user32.dll", "bool", "InsertMenuItemW", "handle", $hMenu, "uint", $iIndex, "bool", True, "struct*", $tMenu)
  184. If @error Then Return SetError(@error, @extended, -1)
  185. Return SetExtended($aResult[0], $iIndex)
  186. EndFunc ;==>_GUICtrlMenu_AddMenuItem
  187. ; #FUNCTION# ====================================================================================================================
  188. ; Author ........: Paul Campbell (PaulIA)
  189. ; Modified.......:
  190. ; ===============================================================================================================================
  191. Func _GUICtrlMenu_AppendMenu($hMenu, $iFlags, $iNewItem, $vNewItem)
  192. Local $sType = "wstr"
  193. If BitAND($iFlags, $MF_BITMAP) Then $sType = "handle"
  194. If BitAND($iFlags, $MF_OWNERDRAW) Then $sType = "ulong_ptr"
  195. Local $aResult = DllCall("user32.dll", "bool", "AppendMenuW", "handle", $hMenu, "uint", $iFlags, "uint_ptr", $iNewItem, $sType, $vNewItem)
  196. If @error Then Return SetError(@error, @extended, False)
  197. If $aResult[0] = 0 Then Return SetError(10, 0, False)
  198. _GUICtrlMenu_DrawMenuBar(_GUICtrlMenu_FindParent($hMenu))
  199. Return True
  200. EndFunc ;==>_GUICtrlMenu_AppendMenu
  201. ; #FUNCTION# ====================================================================================================================
  202. ; Author.........: Yashied
  203. ; Modified.......: jpm
  204. ; ===============================================================================================================================
  205. Func _GUICtrlMenu_CalculatePopupWindowPosition($iX, $iY, $iWidth, $iHeight, $iFlags = 0, $tExclude = 0)
  206. Local $tAnchor = DllStructCreate($tagPOINT)
  207. DllStructSetData($tAnchor, 1, $iX)
  208. DllStructSetData($tAnchor, 2, $iY)
  209. Local $tSIZE = DllStructCreate($tagSIZE)
  210. DllStructSetData($tSIZE, 1, $iWidth)
  211. DllStructSetData($tSIZE, 2, $iHeight)
  212. Local $tPos = DllStructCreate($tagRECT)
  213. Local $aRet = DllCall('user32.dll', 'bool', 'CalculatePopupWindowPosition', 'struct*', $tAnchor, 'struct*', $tSIZE, _
  214. 'uint', $iFlags, 'struct*', $tExclude, 'struct*', $tPos)
  215. If @error Or Not $aRet[0] Then Return SetError(@error + 10, @extended, 0)
  216. Return $tPos
  217. EndFunc ;==>_GUICtrlMenu_CalculatePopupWindowPosition
  218. ; #FUNCTION# ====================================================================================================================
  219. ; Author ........: Paul Campbell (PaulIA)
  220. ; Modified.......:
  221. ; ===============================================================================================================================
  222. Func _GUICtrlMenu_CheckMenuItem($hMenu, $iItem, $bCheck = True, $bByPos = True)
  223. Local $iByPos = 0
  224. If $bCheck Then $iByPos = BitOR($iByPos, $MF_CHECKED)
  225. If $bByPos Then $iByPos = BitOR($iByPos, $MF_BYPOSITION)
  226. Local $aResult = DllCall("user32.dll", "dword", "CheckMenuItem", "handle", $hMenu, "uint", $iItem, "uint", $iByPos)
  227. If @error Then Return SetError(@error, @extended, -1)
  228. Return $aResult[0]
  229. EndFunc ;==>_GUICtrlMenu_CheckMenuItem
  230. ; #FUNCTION# ====================================================================================================================
  231. ; Author ........: Paul Campbell (PaulIA)
  232. ; Modified.......:
  233. ; ===============================================================================================================================
  234. Func _GUICtrlMenu_CheckRadioItem($hMenu, $iFirst, $iLast, $iCheck, $bByPos = True)
  235. Local $iByPos = 0
  236. If $bByPos Then $iByPos = $MF_BYPOSITION
  237. Local $aResult = DllCall("user32.dll", "bool", "CheckMenuRadioItem", "handle", $hMenu, "uint", $iFirst, "uint", $iLast, "uint", $iCheck, "uint", $iByPos)
  238. If @error Then Return SetError(@error, @extended, False)
  239. Return $aResult[0]
  240. EndFunc ;==>_GUICtrlMenu_CheckRadioItem
  241. ; #FUNCTION# ====================================================================================================================
  242. ; Author ........: Paul Campbell (PaulIA)
  243. ; Modified.......:
  244. ; ===============================================================================================================================
  245. Func _GUICtrlMenu_CreateMenu($iStyle = $MNS_CHECKORBMP)
  246. Local $aResult = DllCall("user32.dll", "handle", "CreateMenu")
  247. If @error Then Return SetError(@error, @extended, 0)
  248. If $aResult[0] = 0 Then Return SetError(10, 0, 0)
  249. _GUICtrlMenu_SetMenuStyle($aResult[0], $iStyle)
  250. Return $aResult[0]
  251. EndFunc ;==>_GUICtrlMenu_CreateMenu
  252. ; #FUNCTION# ====================================================================================================================
  253. ; Author ........: Paul Campbell (PaulIA)
  254. ; Modified.......:
  255. ; ===============================================================================================================================
  256. Func _GUICtrlMenu_CreatePopup($iStyle = $MNS_CHECKORBMP)
  257. Local $aResult = DllCall("user32.dll", "handle", "CreatePopupMenu")
  258. If @error Then Return SetError(@error, @extended, 0)
  259. If $aResult[0] = 0 Then Return SetError(10, 0, 0)
  260. _GUICtrlMenu_SetMenuStyle($aResult[0], $iStyle)
  261. Return $aResult[0]
  262. EndFunc ;==>_GUICtrlMenu_CreatePopup
  263. ; #FUNCTION# ====================================================================================================================
  264. ; Author ........: Paul Campbell (PaulIA)
  265. ; Modified.......:
  266. ; ===============================================================================================================================
  267. Func _GUICtrlMenu_DeleteMenu($hMenu, $iItem, $bByPos = True)
  268. Local $iByPos = 0
  269. If $bByPos Then $iByPos = $MF_BYPOSITION
  270. Local $aResult = DllCall("user32.dll", "bool", "DeleteMenu", "handle", $hMenu, "uint", $iItem, "uint", $iByPos)
  271. If @error Then Return SetError(@error, @extended, False)
  272. If $aResult[0] = 0 Then Return SetError(10, 0, False)
  273. _GUICtrlMenu_DrawMenuBar(_GUICtrlMenu_FindParent($hMenu))
  274. Return True
  275. EndFunc ;==>_GUICtrlMenu_DeleteMenu
  276. ; #FUNCTION# ====================================================================================================================
  277. ; Author ........: Paul Campbell (PaulIA)
  278. ; Modified.......:
  279. ; ===============================================================================================================================
  280. Func _GUICtrlMenu_DestroyMenu($hMenu)
  281. Local $aResult = DllCall("user32.dll", "bool", "DestroyMenu", "handle", $hMenu)
  282. If @error Then Return SetError(@error, @extended, False)
  283. Return $aResult[0]
  284. EndFunc ;==>_GUICtrlMenu_DestroyMenu
  285. ; #FUNCTION# ====================================================================================================================
  286. ; Author ........: Paul Campbell (PaulIA)
  287. ; Modified.......:
  288. ; ===============================================================================================================================
  289. Func _GUICtrlMenu_DrawMenuBar($hWnd)
  290. Local $aResult = DllCall("user32.dll", "bool", "DrawMenuBar", "hwnd", $hWnd)
  291. If @error Then Return SetError(@error, @extended, False)
  292. Return $aResult[0]
  293. EndFunc ;==>_GUICtrlMenu_DrawMenuBar
  294. ; #FUNCTION# ====================================================================================================================
  295. ; Author ........: Paul Campbell (PaulIA)
  296. ; Modified.......:
  297. ; ===============================================================================================================================
  298. Func _GUICtrlMenu_EnableMenuItem($hMenu, $iItem, $iState = 0, $bByPos = True)
  299. Local $iByPos = $iState
  300. If $bByPos Then $iByPos = BitOR($iByPos, $MF_BYPOSITION)
  301. Local $aResult = DllCall("user32.dll", "bool", "EnableMenuItem", "handle", $hMenu, "uint", $iItem, "uint", $iByPos)
  302. If @error Then Return SetError(@error, @extended, False)
  303. If $aResult[0] = 0 Then Return SetError(10, 0, False)
  304. _GUICtrlMenu_DrawMenuBar(_GUICtrlMenu_FindParent($hMenu))
  305. Return True
  306. EndFunc ;==>_GUICtrlMenu_EnableMenuItem
  307. ; #NO_DOC_FUNCTION# =============================================================================================================
  308. ; Name...........: _GUICtrlMenu_EndMenu
  309. ; Description ...: Ends the calling thread's active menu
  310. ; Syntax.........: _GUICtrlMenu_EndMenu ( )
  311. ; Parameters ....:
  312. ; Return values .: Success - True
  313. ; Failure - False
  314. ; Author ........: Paul Campbell (PaulIA)
  315. ; Modified.......:
  316. ; Remarks .......: Does not work on menus in external programs
  317. ; Related .......:
  318. ; Link ..........: @@MsdnLink@@ EndMenu
  319. ; Example .......:
  320. ; ===============================================================================================================================
  321. Func _GUICtrlMenu_EndMenu()
  322. Local $aResult = DllCall("user32.dll", "bool", "EndMenu")
  323. If @error Then Return SetError(@error, @extended, False)
  324. Return $aResult[0]
  325. EndFunc ;==>_GUICtrlMenu_EndMenu
  326. ; #FUNCTION# ====================================================================================================================
  327. ; Author ........: Paul Campbell (PaulIA)
  328. ; Modified.......:
  329. ; ===============================================================================================================================
  330. Func _GUICtrlMenu_FindItem($hMenu, $sText, $bInStr = False, $iStart = 0)
  331. Local $sMenu
  332. For $iI = $iStart To _GUICtrlMenu_GetItemCount($hMenu)
  333. $sMenu = StringReplace(_GUICtrlMenu_GetItemText($hMenu, $iI), "&", "")
  334. Switch $bInStr
  335. Case False
  336. If $sMenu = $sText Then Return $iI
  337. Case True
  338. If StringInStr($sMenu, $sText) Then Return $iI
  339. EndSwitch
  340. Next
  341. Return -1
  342. EndFunc ;==>_GUICtrlMenu_FindItem
  343. ; #FUNCTION# ====================================================================================================================
  344. ; Author ........: Paul Campbell (PaulIA)
  345. ; Modified.......:
  346. ; ===============================================================================================================================
  347. Func _GUICtrlMenu_FindParent($hMenu)
  348. Local $hList = _WinAPI_EnumWindowsTop()
  349. For $iI = 1 To $hList[0][0]
  350. If _GUICtrlMenu_GetMenu($hList[$iI][0]) = $hMenu Then Return $hList[$iI][0]
  351. Next
  352. EndFunc ;==>_GUICtrlMenu_FindParent
  353. ; #FUNCTION# ====================================================================================================================
  354. ; Author ........: Paul Campbell (PaulIA)
  355. ; Modified.......:
  356. ; ===============================================================================================================================
  357. Func _GUICtrlMenu_GetItemBmp($hMenu, $iItem, $bByPos = True)
  358. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  359. Return DllStructGetData($tInfo, "BmpItem")
  360. EndFunc ;==>_GUICtrlMenu_GetItemBmp
  361. ; #FUNCTION# ====================================================================================================================
  362. ; Author ........: Paul Campbell (PaulIA)
  363. ; Modified.......:
  364. ; ===============================================================================================================================
  365. Func _GUICtrlMenu_GetItemBmpChecked($hMenu, $iItem, $bByPos = True)
  366. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  367. Return DllStructGetData($tInfo, "BmpChecked")
  368. EndFunc ;==>_GUICtrlMenu_GetItemBmpChecked
  369. ; #FUNCTION# ====================================================================================================================
  370. ; Author ........: Paul Campbell (PaulIA)
  371. ; Modified.......:
  372. ; ===============================================================================================================================
  373. Func _GUICtrlMenu_GetItemBmpUnchecked($hMenu, $iItem, $bByPos = True)
  374. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  375. Return DllStructGetData($tInfo, "BmpUnchecked")
  376. EndFunc ;==>_GUICtrlMenu_GetItemBmpUnchecked
  377. ; #FUNCTION# ====================================================================================================================
  378. ; Author ........: Paul Campbell (PaulIA)
  379. ; Modified.......:
  380. ; ===============================================================================================================================
  381. Func _GUICtrlMenu_GetItemChecked($hMenu, $iItem, $bByPos = True)
  382. Return BitAND(_GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos), $MF_CHECKED) <> 0
  383. EndFunc ;==>_GUICtrlMenu_GetItemChecked
  384. ; #FUNCTION# ====================================================================================================================
  385. ; Author ........: Paul Campbell (PaulIA)
  386. ; Modified.......:
  387. ; ===============================================================================================================================
  388. Func _GUICtrlMenu_GetItemCount($hMenu)
  389. Local $aResult = DllCall("user32.dll", "int", "GetMenuItemCount", "handle", $hMenu)
  390. If @error Then Return SetError(@error, @extended, -1)
  391. Return $aResult[0]
  392. EndFunc ;==>_GUICtrlMenu_GetItemCount
  393. ; #FUNCTION# ====================================================================================================================
  394. ; Author ........: Paul Campbell (PaulIA)
  395. ; Modified.......:
  396. ; ===============================================================================================================================
  397. Func _GUICtrlMenu_GetItemData($hMenu, $iItem, $bByPos = True)
  398. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  399. Return DllStructGetData($tInfo, "ItemData")
  400. EndFunc ;==>_GUICtrlMenu_GetItemData
  401. ; #FUNCTION# ====================================================================================================================
  402. ; Author ........: Paul Campbell (PaulIA)
  403. ; Modified.......:
  404. ; ===============================================================================================================================
  405. Func _GUICtrlMenu_GetItemDefault($hMenu, $iItem, $bByPos = True)
  406. Return BitAND(_GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos), $MF_DEFAULT) <> 0
  407. EndFunc ;==>_GUICtrlMenu_GetItemDefault
  408. ; #FUNCTION# ====================================================================================================================
  409. ; Author ........: Paul Campbell (PaulIA)
  410. ; Modified.......:
  411. ; ===============================================================================================================================
  412. Func _GUICtrlMenu_GetItemDisabled($hMenu, $iItem, $bByPos = True)
  413. Return BitAND(_GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos), $MF_DISABLED) <> 0
  414. EndFunc ;==>_GUICtrlMenu_GetItemDisabled
  415. ; #FUNCTION# ====================================================================================================================
  416. ; Author ........: Paul Campbell (PaulIA)
  417. ; Modified.......:
  418. ; ===============================================================================================================================
  419. Func _GUICtrlMenu_GetItemEnabled($hMenu, $iItem, $bByPos = True)
  420. Return BitAND(_GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos), $MF_DISABLED) = 0
  421. EndFunc ;==>_GUICtrlMenu_GetItemEnabled
  422. ; #FUNCTION# ====================================================================================================================
  423. ; Author ........: Paul Campbell (PaulIA)
  424. ; Modified.......:
  425. ; ===============================================================================================================================
  426. Func _GUICtrlMenu_GetItemGrayed($hMenu, $iItem, $bByPos = True)
  427. Return BitAND(_GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos), $MF_GRAYED) <> 0
  428. EndFunc ;==>_GUICtrlMenu_GetItemGrayed
  429. ; #FUNCTION# ====================================================================================================================
  430. ; Author ........: Paul Campbell (PaulIA)
  431. ; Modified.......:
  432. ; ===============================================================================================================================
  433. Func _GUICtrlMenu_GetItemHighlighted($hMenu, $iItem, $bByPos = True)
  434. Return BitAND(_GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos), $MF_HILITE) <> 0
  435. EndFunc ;==>_GUICtrlMenu_GetItemHighlighted
  436. ; #FUNCTION# ====================================================================================================================
  437. ; Author ........: Paul Campbell (PaulIA)
  438. ; Modified.......:
  439. ; ===============================================================================================================================
  440. Func _GUICtrlMenu_GetItemID($hMenu, $iItem, $bByPos = True)
  441. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  442. Return DllStructGetData($tInfo, "ID")
  443. EndFunc ;==>_GUICtrlMenu_GetItemID
  444. ; #FUNCTION# ====================================================================================================================
  445. ; Author ........: Paul Campbell (PaulIA)
  446. ; Modified.......:
  447. ; ===============================================================================================================================
  448. Func _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos = True)
  449. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  450. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  451. DllStructSetData($tInfo, "Mask", $MIIM_DATAMASK)
  452. Local $aResult = DllCall("user32.dll", "bool", "GetMenuItemInfo", "handle", $hMenu, "uint", $iItem, "bool", $bByPos, "struct*", $tInfo)
  453. If @error Then Return SetError(@error, @extended, 0)
  454. Return SetExtended($aResult[0], $tInfo)
  455. EndFunc ;==>_GUICtrlMenu_GetItemInfo
  456. ; #FUNCTION# ====================================================================================================================
  457. ; Author ........: Paul Campbell (PaulIA)
  458. ; Modified.......:
  459. ; ===============================================================================================================================
  460. Func _GUICtrlMenu_GetItemRect($hWnd, $hMenu, $iItem)
  461. Local $tRECT = _GUICtrlMenu_GetItemRectEx($hWnd, $hMenu, $iItem)
  462. Local $aRect[4]
  463. $aRect[0] = DllStructGetData($tRECT, "Left")
  464. $aRect[1] = DllStructGetData($tRECT, "Top")
  465. $aRect[2] = DllStructGetData($tRECT, "Right")
  466. $aRect[3] = DllStructGetData($tRECT, "Bottom")
  467. Return $aRect
  468. EndFunc ;==>_GUICtrlMenu_GetItemRect
  469. ; #FUNCTION# ====================================================================================================================
  470. ; Author ........: Paul Campbell (PaulIA)
  471. ; Modified.......:
  472. ; ===============================================================================================================================
  473. Func _GUICtrlMenu_GetItemRectEx($hWnd, $hMenu, $iItem)
  474. Local $tRECT = DllStructCreate($tagRECT)
  475. Local $aResult = DllCall("user32.dll", "bool", "GetMenuItemRect", "hwnd", $hWnd, "handle", $hMenu, "uint", $iItem, "struct*", $tRECT)
  476. If @error Then Return SetError(@error, @extended, 0)
  477. Return SetExtended($aResult[0], $tRECT)
  478. EndFunc ;==>_GUICtrlMenu_GetItemRectEx
  479. ; #FUNCTION# ====================================================================================================================
  480. ; Author ........: Paul Campbell (PaulIA)
  481. ; Modified.......:
  482. ; ===============================================================================================================================
  483. Func _GUICtrlMenu_GetItemState($hMenu, $iItem, $bByPos = True)
  484. Local $iRet = 0
  485. Local $iState = _GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos)
  486. If BitAND($iState, $MFS_CHECKED) <> 0 Then $iRet = BitOR($iRet, 1)
  487. If BitAND($iState, $MFS_DEFAULT) <> 0 Then $iRet = BitOR($iRet, 2)
  488. If BitAND($iState, $MFS_DISABLED) <> 0 Then $iRet = BitOR($iRet, 4)
  489. If BitAND($iState, $MFS_GRAYED) <> 0 Then $iRet = BitOR($iRet, 8)
  490. If BitAND($iState, $MFS_HILITE) <> 0 Then $iRet = BitOR($iRet, 16)
  491. Return $iRet
  492. EndFunc ;==>_GUICtrlMenu_GetItemState
  493. ; #FUNCTION# ====================================================================================================================
  494. ; Author ........: Paul Campbell (PaulIA)
  495. ; Modified.......:
  496. ; ===============================================================================================================================
  497. Func _GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos = True)
  498. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  499. Return DllStructGetData($tInfo, "State")
  500. EndFunc ;==>_GUICtrlMenu_GetItemStateEx
  501. ; #FUNCTION# ====================================================================================================================
  502. ; Author ........: Paul Campbell (PaulIA)
  503. ; Modified.......:
  504. ; ===============================================================================================================================
  505. Func _GUICtrlMenu_GetItemSubMenu($hMenu, $iItem)
  506. Local $aResult = DllCall("user32.dll", "handle", "GetSubMenu", "handle", $hMenu, "int", $iItem)
  507. If @error Then Return SetError(@error, @extended, 0)
  508. Return $aResult[0]
  509. EndFunc ;==>_GUICtrlMenu_GetItemSubMenu
  510. ; #FUNCTION# ====================================================================================================================
  511. ; Author ........: Paul Campbell (PaulIA)
  512. ; Modified.......:
  513. ; ===============================================================================================================================
  514. Func _GUICtrlMenu_GetItemText($hMenu, $iItem, $bByPos = True)
  515. Local $iByPos = 0
  516. If $bByPos Then $iByPos = $MF_BYPOSITION
  517. Local $aResult = DllCall("user32.dll", "int", "GetMenuStringW", "handle", $hMenu, "uint", $iItem, "wstr", "", "int", 4096, "uint", $iByPos)
  518. If @error Then Return SetError(@error, @extended, 0)
  519. Return SetExtended($aResult[0], $aResult[3])
  520. EndFunc ;==>_GUICtrlMenu_GetItemText
  521. ; #FUNCTION# ====================================================================================================================
  522. ; Author ........: Paul Campbell (PaulIA)
  523. ; Modified.......:
  524. ; ===============================================================================================================================
  525. Func _GUICtrlMenu_GetItemType($hMenu, $iItem, $bByPos = True)
  526. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  527. Return DllStructGetData($tInfo, "Type")
  528. EndFunc ;==>_GUICtrlMenu_GetItemType
  529. ; #FUNCTION# ====================================================================================================================
  530. ; Author ........: Paul Campbell (PaulIA)
  531. ; Modified.......:
  532. ; ===============================================================================================================================
  533. Func _GUICtrlMenu_GetMenu($hWnd)
  534. Local $aResult = DllCall("user32.dll", "handle", "GetMenu", "hwnd", $hWnd)
  535. If @error Then Return SetError(@error, @extended, 0)
  536. Return $aResult[0]
  537. EndFunc ;==>_GUICtrlMenu_GetMenu
  538. ; #FUNCTION# ====================================================================================================================
  539. ; Author ........: Paul Campbell (PaulIA)
  540. ; Modified.......:
  541. ; ===============================================================================================================================
  542. Func _GUICtrlMenu_GetMenuBackground($hMenu)
  543. Local $tInfo = _GUICtrlMenu_GetMenuInfo($hMenu)
  544. Return DllStructGetData($tInfo, "hBack")
  545. EndFunc ;==>_GUICtrlMenu_GetMenuBackground
  546. ; #FUNCTION# ====================================================================================================================
  547. ; Author ........: Paul Campbell (PaulIA)
  548. ; Modified.......:
  549. ; ===============================================================================================================================
  550. Func _GUICtrlMenu_GetMenuBarInfo($hWnd, $iItem = 0, $iObject = 1)
  551. Local $aObject[3] = [$__MENUCONSTANT_OBJID_CLIENT, $OBJID_MENU, $OBJID_SYSMENU]
  552. Local $tInfo = DllStructCreate($tagMENUBARINFO)
  553. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  554. Local $aResult = DllCall("user32.dll", "bool", "GetMenuBarInfo", "hwnd", $hWnd, "long", $aObject[$iObject], "long", $iItem, "struct*", $tInfo)
  555. If @error Then Return SetError(@error, @extended, 0)
  556. Local $aInfo[8]
  557. $aInfo[0] = DllStructGetData($tInfo, "Left")
  558. $aInfo[1] = DllStructGetData($tInfo, "Top")
  559. $aInfo[2] = DllStructGetData($tInfo, "Right")
  560. $aInfo[3] = DllStructGetData($tInfo, "Bottom")
  561. $aInfo[4] = DllStructGetData($tInfo, "hMenu")
  562. $aInfo[5] = DllStructGetData($tInfo, "hWndMenu")
  563. $aInfo[6] = BitAND(DllStructGetData($tInfo, "Focused"), 1) <> 0
  564. $aInfo[7] = BitAND(DllStructGetData($tInfo, "Focused"), 2) <> 0
  565. Return SetExtended($aResult[0], $aInfo)
  566. EndFunc ;==>_GUICtrlMenu_GetMenuBarInfo
  567. ; #FUNCTION# ====================================================================================================================
  568. ; Author ........: Paul Campbell (PaulIA)
  569. ; Modified.......:
  570. ; ===============================================================================================================================
  571. Func _GUICtrlMenu_GetMenuContextHelpID($hMenu)
  572. Local $tInfo = _GUICtrlMenu_GetMenuInfo($hMenu)
  573. Return DllStructGetData($tInfo, "ContextHelpID")
  574. EndFunc ;==>_GUICtrlMenu_GetMenuContextHelpID
  575. ; #FUNCTION# ====================================================================================================================
  576. ; Author ........: Paul Campbell (PaulIA)
  577. ; Modified.......:
  578. ; ===============================================================================================================================
  579. Func _GUICtrlMenu_GetMenuData($hMenu)
  580. Local $tInfo = _GUICtrlMenu_GetMenuInfo($hMenu)
  581. Return DllStructGetData($tInfo, "MenuData")
  582. EndFunc ;==>_GUICtrlMenu_GetMenuData
  583. ; #FUNCTION# ====================================================================================================================
  584. ; Author ........: Paul Campbell (PaulIA)
  585. ; Modified.......:
  586. ; ===============================================================================================================================
  587. Func _GUICtrlMenu_GetMenuDefaultItem($hMenu, $bByPos = True, $iFlags = 0)
  588. Local $aResult = DllCall("user32.dll", "INT", "GetMenuDefaultItem", "handle", $hMenu, "uint", $bByPos, "uint", $iFlags)
  589. If @error Then Return SetError(@error, @extended, -1)
  590. Return $aResult[0]
  591. EndFunc ;==>_GUICtrlMenu_GetMenuDefaultItem
  592. ; #FUNCTION# ====================================================================================================================
  593. ; Author ........: Paul Campbell (PaulIA)
  594. ; Modified.......:
  595. ; ===============================================================================================================================
  596. Func _GUICtrlMenu_GetMenuHeight($hMenu)
  597. Local $tInfo = _GUICtrlMenu_GetMenuInfo($hMenu)
  598. Return DllStructGetData($tInfo, "YMax")
  599. EndFunc ;==>_GUICtrlMenu_GetMenuHeight
  600. ; #FUNCTION# ====================================================================================================================
  601. ; Author ........: Paul Campbell (PaulIA)
  602. ; Modified.......:
  603. ; ===============================================================================================================================
  604. Func _GUICtrlMenu_GetMenuInfo($hMenu)
  605. Local $tInfo = DllStructCreate($tagMENUINFO)
  606. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  607. DllStructSetData($tInfo, "Mask", BitOR($MIM_BACKGROUND, $MIM_HELPID, $MIM_MAXHEIGHT, $MIM_MENUDATA, $MIM_STYLE))
  608. Local $aResult = DllCall("user32.dll", "bool", "GetMenuInfo", "handle", $hMenu, "struct*", $tInfo)
  609. If @error Then Return SetError(@error, @extended, 0)
  610. Return SetExtended($aResult[0], $tInfo)
  611. EndFunc ;==>_GUICtrlMenu_GetMenuInfo
  612. ; #FUNCTION# ====================================================================================================================
  613. ; Author ........: Paul Campbell (PaulIA)
  614. ; Modified.......:
  615. ; ===============================================================================================================================
  616. Func _GUICtrlMenu_GetMenuStyle($hMenu)
  617. Local $tInfo = _GUICtrlMenu_GetMenuInfo($hMenu)
  618. Return DllStructGetData($tInfo, "Style")
  619. EndFunc ;==>_GUICtrlMenu_GetMenuStyle
  620. ; #FUNCTION# ====================================================================================================================
  621. ; Author ........: Paul Campbell (PaulIA)
  622. ; Modified.......:
  623. ; ===============================================================================================================================
  624. Func _GUICtrlMenu_GetSystemMenu($hWnd, $bRevert = False)
  625. Local $aResult = DllCall("user32.dll", "hwnd", "GetSystemMenu", "hwnd", $hWnd, "int", $bRevert)
  626. If @error Then Return SetError(@error, @extended, 0)
  627. Return $aResult[0]
  628. EndFunc ;==>_GUICtrlMenu_GetSystemMenu
  629. ; #FUNCTION# ====================================================================================================================
  630. ; Author ........: Paul Campbell (PaulIA)
  631. ; Modified.......:
  632. ; ===============================================================================================================================
  633. Func _GUICtrlMenu_InsertMenuItem($hMenu, $iIndex, $sText, $iCmdID = 0, $hSubMenu = 0)
  634. Local $tMenu = DllStructCreate($tagMENUITEMINFO)
  635. DllStructSetData($tMenu, "Size", DllStructGetSize($tMenu))
  636. DllStructSetData($tMenu, "ID", $iCmdID)
  637. DllStructSetData($tMenu, "SubMenu", $hSubMenu)
  638. If $sText = "" Then
  639. DllStructSetData($tMenu, "Mask", $MIIM_FTYPE)
  640. DllStructSetData($tMenu, "Type", $MFT_SEPARATOR)
  641. Else
  642. DllStructSetData($tMenu, "Mask", BitOR($MIIM_ID, $MIIM_STRING, $MIIM_SUBMENU))
  643. DllStructSetData($tMenu, "Type", $MFT_STRING)
  644. Local $tText = DllStructCreate("wchar Text[" & StringLen($sText) + 1 & "]")
  645. DllStructSetData($tText, "Text", $sText)
  646. DllStructSetData($tMenu, "TypeData", DllStructGetPtr($tText))
  647. EndIf
  648. Local $aResult = DllCall("user32.dll", "bool", "InsertMenuItemW", "handle", $hMenu, "uint", $iIndex, "bool", True, "struct*", $tMenu)
  649. If @error Then Return SetError(@error, @extended, False)
  650. Return $aResult[0]
  651. EndFunc ;==>_GUICtrlMenu_InsertMenuItem
  652. ; #FUNCTION# ====================================================================================================================
  653. ; Author ........: Paul Campbell (PaulIA)
  654. ; Modified.......:
  655. ; ===============================================================================================================================
  656. Func _GUICtrlMenu_InsertMenuItemEx($hMenu, $iIndex, ByRef $tMenu, $bByPos = True)
  657. Local $aResult = DllCall("user32.dll", "bool", "InsertMenuItemW", "handle", $hMenu, "uint", $iIndex, "bool", $bByPos, "struct*", $tMenu)
  658. If @error Then Return SetError(@error, @extended, False)
  659. Return $aResult[0]
  660. EndFunc ;==>_GUICtrlMenu_InsertMenuItemEx
  661. ; #FUNCTION# ====================================================================================================================
  662. ; Author ........: Paul Campbell (PaulIA)
  663. ; Modified.......:
  664. ; ===============================================================================================================================
  665. Func _GUICtrlMenu_IsMenu($hMenu)
  666. Local $aResult = DllCall("user32.dll", "bool", "IsMenu", "handle", $hMenu)
  667. If @error Then Return SetError(@error, @extended, False)
  668. Return $aResult[0]
  669. EndFunc ;==>_GUICtrlMenu_IsMenu
  670. ; #FUNCTION# ====================================================================================================================
  671. ; Author ........: Paul Campbell (PaulIA)
  672. ; Modified.......:
  673. ; ===============================================================================================================================
  674. Func _GUICtrlMenu_LoadMenu($hInst, $sMenuName)
  675. Local $aResult = DllCall("user32.dll", "handle", "LoadMenuW", "handle", $hInst, "wstr", $sMenuName)
  676. If @error Then Return SetError(@error, @extended, 0)
  677. Return $aResult[0]
  678. EndFunc ;==>_GUICtrlMenu_LoadMenu
  679. ; #FUNCTION# ====================================================================================================================
  680. ; Author ........: Paul Campbell (PaulIA)
  681. ; Modified.......:
  682. ; ===============================================================================================================================
  683. Func _GUICtrlMenu_MapAccelerator($hMenu, $sAccelKey)
  684. Local $sText
  685. Local $iCount = _GUICtrlMenu_GetItemCount($hMenu)
  686. For $iI = 0 To $iCount - 1
  687. $sText = _GUICtrlMenu_GetItemText($hMenu, $iI)
  688. If StringInStr($sText, "&" & $sAccelKey) > 0 Then Return $iI
  689. Next
  690. Return -1
  691. EndFunc ;==>_GUICtrlMenu_MapAccelerator
  692. ; #FUNCTION# ====================================================================================================================
  693. ; Author ........: Paul Campbell (PaulIA)
  694. ; Modified.......:
  695. ; ===============================================================================================================================
  696. Func _GUICtrlMenu_MenuItemFromPoint($hWnd, $hMenu, $iX = -1, $iY = -1)
  697. If $iX = -1 Then $iX = _WinAPI_GetMousePosX()
  698. If $iY = -1 Then $iY = _WinAPI_GetMousePosY()
  699. Local $aResult = DllCall("user32.dll", "int", "MenuItemFromPoint", "hwnd", $hWnd, "handle", $hMenu, "int", $iX, "int", $iY)
  700. If @error Then Return SetError(@error, @extended, -1)
  701. Return $aResult[0]
  702. EndFunc ;==>_GUICtrlMenu_MenuItemFromPoint
  703. ; #FUNCTION# ====================================================================================================================
  704. ; Author ........: Paul Campbell (PaulIA)
  705. ; Modified.......:
  706. ; ===============================================================================================================================
  707. Func _GUICtrlMenu_RemoveMenu($hMenu, $iItem, $bByPos = True)
  708. Local $iByPos = 0
  709. If $bByPos Then $iByPos = $MF_BYPOSITION
  710. Local $aResult = DllCall("user32.dll", "bool", "RemoveMenu", "handle", $hMenu, "uint", $iItem, "uint", $iByPos)
  711. If @error Then Return SetError(@error, @extended, False)
  712. If $aResult[0] = 0 Then Return SetError(10, 0, False)
  713. _GUICtrlMenu_DrawMenuBar(_GUICtrlMenu_FindParent($hMenu))
  714. Return True
  715. EndFunc ;==>_GUICtrlMenu_RemoveMenu
  716. ; #FUNCTION# ====================================================================================================================
  717. ; Author ........: Paul Campbell (PaulIA)
  718. ; Modified.......:
  719. ; ===============================================================================================================================
  720. Func _GUICtrlMenu_SetItemBitmaps($hMenu, $iItem, $hChecked, $hUnChecked, $bByPos = True)
  721. Local $iByPos = 0
  722. If $bByPos Then $iByPos = $MF_BYPOSITION
  723. Local $aResult = DllCall("user32.dll", "bool", "SetMenuItemBitmaps", "handle", $hMenu, "uint", $iItem, "uint", $iByPos, "handle", $hUnChecked, "handle", $hChecked)
  724. If @error Then Return SetError(@error, @extended, False)
  725. Return $aResult[0]
  726. EndFunc ;==>_GUICtrlMenu_SetItemBitmaps
  727. ; #FUNCTION# ====================================================================================================================
  728. ; Author ........: Paul Campbell (PaulIA)
  729. ; Modified.......:
  730. ; ===============================================================================================================================
  731. Func _GUICtrlMenu_SetItemBmp($hMenu, $iItem, $hBitmap, $bByPos = True)
  732. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  733. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  734. DllStructSetData($tInfo, "Mask", $MIIM_BITMAP)
  735. DllStructSetData($tInfo, "BmpItem", $hBitmap)
  736. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  737. EndFunc ;==>_GUICtrlMenu_SetItemBmp
  738. ; #FUNCTION# ====================================================================================================================
  739. ; Author ........: Paul Campbell (PaulIA)
  740. ; Modified.......:
  741. ; ===============================================================================================================================
  742. Func _GUICtrlMenu_SetItemBmpChecked($hMenu, $iItem, $hBitmap, $bByPos = True)
  743. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  744. DllStructSetData($tInfo, "Mask", $MIIM_CHECKMARKS)
  745. DllStructSetData($tInfo, "BmpChecked", $hBitmap)
  746. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  747. EndFunc ;==>_GUICtrlMenu_SetItemBmpChecked
  748. ; #FUNCTION# ====================================================================================================================
  749. ; Author ........: Paul Campbell (PaulIA)
  750. ; Modified.......:
  751. ; ===============================================================================================================================
  752. Func _GUICtrlMenu_SetItemBmpUnchecked($hMenu, $iItem, $hBitmap, $bByPos = True)
  753. Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, $bByPos)
  754. DllStructSetData($tInfo, "Mask", $MIIM_CHECKMARKS)
  755. DllStructSetData($tInfo, "BmpUnchecked", $hBitmap)
  756. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  757. EndFunc ;==>_GUICtrlMenu_SetItemBmpUnchecked
  758. ; #FUNCTION# ====================================================================================================================
  759. ; Author ........: Paul Campbell (PaulIA)
  760. ; Modified.......:
  761. ; ===============================================================================================================================
  762. Func _GUICtrlMenu_SetItemChecked($hMenu, $iItem, $bState = True, $bByPos = True)
  763. Return _GUICtrlMenu_SetItemState($hMenu, $iItem, $MFS_CHECKED, $bState, $bByPos)
  764. EndFunc ;==>_GUICtrlMenu_SetItemChecked
  765. ; #FUNCTION# ====================================================================================================================
  766. ; Author ........: Paul Campbell (PaulIA)
  767. ; Modified.......:
  768. ; ===============================================================================================================================
  769. Func _GUICtrlMenu_SetItemData($hMenu, $iItem, $iData, $bByPos = True)
  770. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  771. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  772. DllStructSetData($tInfo, "Mask", $MIIM_DATA)
  773. DllStructSetData($tInfo, "ItemData", $iData)
  774. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  775. EndFunc ;==>_GUICtrlMenu_SetItemData
  776. ; #FUNCTION# ====================================================================================================================
  777. ; Author ........: Paul Campbell (PaulIA)
  778. ; Modified.......:
  779. ; ===============================================================================================================================
  780. Func _GUICtrlMenu_SetItemDefault($hMenu, $iItem, $bState = True, $bByPos = True)
  781. Return _GUICtrlMenu_SetItemState($hMenu, $iItem, $MFS_DEFAULT, $bState, $bByPos)
  782. EndFunc ;==>_GUICtrlMenu_SetItemDefault
  783. ; #FUNCTION# ====================================================================================================================
  784. ; Author ........: Paul Campbell (PaulIA)
  785. ; Modified.......:
  786. ; ===============================================================================================================================
  787. Func _GUICtrlMenu_SetItemDisabled($hMenu, $iItem, $bState = True, $bByPos = True)
  788. Return _GUICtrlMenu_SetItemState($hMenu, $iItem, BitOR($MFS_DISABLED, $MFS_GRAYED), $bState, $bByPos)
  789. EndFunc ;==>_GUICtrlMenu_SetItemDisabled
  790. ; #FUNCTION# ====================================================================================================================
  791. ; Author ........: Paul Campbell (PaulIA)
  792. ; Modified.......:
  793. ; ===============================================================================================================================
  794. Func _GUICtrlMenu_SetItemEnabled($hMenu, $iItem, $bState = True, $bByPos = True)
  795. Return _GUICtrlMenu_SetItemState($hMenu, $iItem, BitOR($MFS_DISABLED, $MFS_GRAYED), Not $bState, $bByPos)
  796. EndFunc ;==>_GUICtrlMenu_SetItemEnabled
  797. ; #FUNCTION# ====================================================================================================================
  798. ; Author ........: Paul Campbell (PaulIA)
  799. ; Modified.......:
  800. ; ===============================================================================================================================
  801. Func _GUICtrlMenu_SetItemGrayed($hMenu, $iItem, $bState = True, $bByPos = True)
  802. Return _GUICtrlMenu_SetItemState($hMenu, $iItem, $MFS_GRAYED, $bState, $bByPos)
  803. EndFunc ;==>_GUICtrlMenu_SetItemGrayed
  804. ; #FUNCTION# ====================================================================================================================
  805. ; Author ........: Paul Campbell (PaulIA)
  806. ; Modified.......:
  807. ; ===============================================================================================================================
  808. Func _GUICtrlMenu_SetItemHighlighted($hMenu, $iItem, $bState = True, $bByPos = True)
  809. Return _GUICtrlMenu_SetItemState($hMenu, $iItem, $MFS_HILITE, $bState, $bByPos)
  810. EndFunc ;==>_GUICtrlMenu_SetItemHighlighted
  811. ; #FUNCTION# ====================================================================================================================
  812. ; Author ........: Paul Campbell (PaulIA)
  813. ; Modified.......:
  814. ; ===============================================================================================================================
  815. Func _GUICtrlMenu_SetItemID($hMenu, $iItem, $iID, $bByPos = True)
  816. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  817. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  818. DllStructSetData($tInfo, "Mask", $MIIM_ID)
  819. DllStructSetData($tInfo, "ID", $iID)
  820. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  821. EndFunc ;==>_GUICtrlMenu_SetItemID
  822. ; #FUNCTION# ====================================================================================================================
  823. ; Author ........: Paul Campbell (PaulIA)
  824. ; Modified.......:
  825. ; ===============================================================================================================================
  826. Func _GUICtrlMenu_SetItemInfo($hMenu, $iItem, ByRef $tInfo, $bByPos = True)
  827. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  828. Local $aResult = DllCall("user32.dll", "bool", "SetMenuItemInfoW", "handle", $hMenu, "uint", $iItem, "bool", $bByPos, "struct*", $tInfo)
  829. If @error Then Return SetError(@error, @extended, False)
  830. Return $aResult[0]
  831. EndFunc ;==>_GUICtrlMenu_SetItemInfo
  832. ; #FUNCTION# ====================================================================================================================
  833. ; Author ........: Paul Campbell (PaulIA)
  834. ; Modified.......:
  835. ; ===============================================================================================================================
  836. Func _GUICtrlMenu_SetItemState($hMenu, $iItem, $iState, $bState = True, $bByPos = True)
  837. Local $iFlag = _GUICtrlMenu_GetItemStateEx($hMenu, $iItem, $bByPos)
  838. If $bState Then
  839. $iState = BitOR($iFlag, $iState)
  840. Else
  841. $iState = BitAND($iFlag, BitNOT($iState))
  842. EndIf
  843. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  844. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  845. DllStructSetData($tInfo, "Mask", $MIIM_STATE)
  846. DllStructSetData($tInfo, "State", $iState)
  847. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  848. EndFunc ;==>_GUICtrlMenu_SetItemState
  849. ; #FUNCTION# ====================================================================================================================
  850. ; Author ........: Paul Campbell (PaulIA)
  851. ; Modified.......:
  852. ; ===============================================================================================================================
  853. Func _GUICtrlMenu_SetItemSubMenu($hMenu, $iItem, $hSubMenu, $bByPos = True)
  854. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  855. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  856. DllStructSetData($tInfo, "Mask", $MIIM_SUBMENU)
  857. DllStructSetData($tInfo, "SubMenu", $hSubMenu)
  858. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  859. EndFunc ;==>_GUICtrlMenu_SetItemSubMenu
  860. ; #FUNCTION# ====================================================================================================================
  861. ; Author ........: Paul Campbell (PaulIA)
  862. ; Modified.......:
  863. ; ===============================================================================================================================
  864. Func _GUICtrlMenu_SetItemText($hMenu, $iItem, $sText, $bByPos = True)
  865. Local $tBuffer = DllStructCreate("wchar Text[" & StringLen($sText) + 1 & "]")
  866. DllStructSetData($tBuffer, "Text", $sText)
  867. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  868. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  869. DllStructSetData($tInfo, "Mask", $MIIM_STRING)
  870. DllStructSetData($tInfo, "TypeData", DllStructGetPtr($tBuffer))
  871. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  872. EndFunc ;==>_GUICtrlMenu_SetItemText
  873. ; #FUNCTION# ====================================================================================================================
  874. ; Author ........: Paul Campbell (PaulIA)
  875. ; Modified.......:
  876. ; ===============================================================================================================================
  877. Func _GUICtrlMenu_SetItemType($hMenu, $iItem, $iType, $bByPos = True)
  878. Local $tInfo = DllStructCreate($tagMENUITEMINFO)
  879. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  880. DllStructSetData($tInfo, "Mask", $MIIM_FTYPE)
  881. DllStructSetData($tInfo, "Type", $iType)
  882. Return _GUICtrlMenu_SetItemInfo($hMenu, $iItem, $tInfo, $bByPos)
  883. EndFunc ;==>_GUICtrlMenu_SetItemType
  884. ; #FUNCTION# ====================================================================================================================
  885. ; Author ........: Paul Campbell (PaulIA)
  886. ; Modified.......:
  887. ; ===============================================================================================================================
  888. Func _GUICtrlMenu_SetMenu($hWnd, $hMenu)
  889. Local $aResult = DllCall("user32.dll", "bool", "SetMenu", "hwnd", $hWnd, "handle", $hMenu)
  890. If @error Then Return SetError(@error, @extended, False)
  891. Return $aResult[0]
  892. EndFunc ;==>_GUICtrlMenu_SetMenu
  893. ; #FUNCTION# ====================================================================================================================
  894. ; Author ........: Paul Campbell (PaulIA)
  895. ; Modified.......:
  896. ; ===============================================================================================================================
  897. Func _GUICtrlMenu_SetMenuBackground($hMenu, $hBrush)
  898. Local $tInfo = DllStructCreate($tagMENUINFO)
  899. DllStructSetData($tInfo, "Mask", $MIM_BACKGROUND)
  900. DllStructSetData($tInfo, "hBack", $hBrush)
  901. Return _GUICtrlMenu_SetMenuInfo($hMenu, $tInfo)
  902. EndFunc ;==>_GUICtrlMenu_SetMenuBackground
  903. ; #FUNCTION# ====================================================================================================================
  904. ; Author ........: Paul Campbell (PaulIA)
  905. ; Modified.......:
  906. ; ===============================================================================================================================
  907. Func _GUICtrlMenu_SetMenuContextHelpID($hMenu, $iHelpID)
  908. Local $tInfo = DllStructCreate($tagMENUINFO)
  909. DllStructSetData($tInfo, "Mask", $MIM_HELPID)
  910. DllStructSetData($tInfo, "ContextHelpID", $iHelpID)
  911. Return _GUICtrlMenu_SetMenuInfo($hMenu, $tInfo)
  912. EndFunc ;==>_GUICtrlMenu_SetMenuContextHelpID
  913. ; #FUNCTION# ====================================================================================================================
  914. ; Author ........: Paul Campbell (PaulIA)
  915. ; Modified.......:
  916. ; ===============================================================================================================================
  917. Func _GUICtrlMenu_SetMenuData($hMenu, $iData)
  918. Local $tInfo = DllStructCreate($tagMENUINFO)
  919. DllStructSetData($tInfo, "Mask", $MIM_MENUDATA)
  920. DllStructSetData($tInfo, "MenuData", $iData)
  921. Return _GUICtrlMenu_SetMenuInfo($hMenu, $tInfo)
  922. EndFunc ;==>_GUICtrlMenu_SetMenuData
  923. ; #FUNCTION# ====================================================================================================================
  924. ; Author ........: Paul Campbell (PaulIA)
  925. ; Modified.......:
  926. ; ===============================================================================================================================
  927. Func _GUICtrlMenu_SetMenuDefaultItem($hMenu, $iItem, $bByPos = True)
  928. Local $aResult = DllCall("user32.dll", "bool", "SetMenuDefaultItem", "handle", $hMenu, "uint", $iItem, "uint", $bByPos)
  929. If @error Then Return SetError(@error, @extended, False)
  930. Return $aResult[0]
  931. EndFunc ;==>_GUICtrlMenu_SetMenuDefaultItem
  932. ; #FUNCTION# ====================================================================================================================
  933. ; Author ........: Paul Campbell (PaulIA)
  934. ; Modified.......:
  935. ; ===============================================================================================================================
  936. Func _GUICtrlMenu_SetMenuHeight($hMenu, $iHeight)
  937. Local $tInfo = DllStructCreate($tagMENUINFO)
  938. DllStructSetData($tInfo, "Mask", $MIM_MAXHEIGHT)
  939. DllStructSetData($tInfo, "YMax", $iHeight)
  940. Return _GUICtrlMenu_SetMenuInfo($hMenu, $tInfo)
  941. EndFunc ;==>_GUICtrlMenu_SetMenuHeight
  942. ; #FUNCTION# ====================================================================================================================
  943. ; Author ........: Paul Campbell (PaulIA)
  944. ; Modified.......:
  945. ; ===============================================================================================================================
  946. Func _GUICtrlMenu_SetMenuInfo($hMenu, ByRef $tInfo)
  947. DllStructSetData($tInfo, "Size", DllStructGetSize($tInfo))
  948. Local $aResult = DllCall("user32.dll", "bool", "SetMenuInfo", "handle", $hMenu, "struct*", $tInfo)
  949. If @error Then Return SetError(@error, @extended, False)
  950. Return $aResult[0]
  951. EndFunc ;==>_GUICtrlMenu_SetMenuInfo
  952. ; #FUNCTION# ====================================================================================================================
  953. ; Author ........: Paul Campbell (PaulIA)
  954. ; Modified.......:
  955. ; ===============================================================================================================================
  956. Func _GUICtrlMenu_SetMenuStyle($hMenu, $iStyle)
  957. Local $tInfo = DllStructCreate($tagMENUINFO)
  958. DllStructSetData($tInfo, "Mask", $MIM_STYLE)
  959. DllStructSetData($tInfo, "Style", $iStyle)
  960. Return _GUICtrlMenu_SetMenuInfo($hMenu, $tInfo)
  961. EndFunc ;==>_GUICtrlMenu_SetMenuStyle
  962. ; #FUNCTION# ====================================================================================================================
  963. ; Author ........: Paul Campbell (PaulIA)
  964. ; Modified.......:
  965. ; ===============================================================================================================================
  966. Func _GUICtrlMenu_TrackPopupMenu($hMenu, $hWnd, $iX = -1, $iY = -1, $iAlignX = 1, $iAlignY = 1, $iNotify = 0, $iButtons = 0)
  967. If $iX = -1 Then $iX = _WinAPI_GetMousePosX()
  968. If $iY = -1 Then $iY = _WinAPI_GetMousePosY()
  969. Local $iFlags = 0
  970. Switch $iAlignX
  971. Case 1
  972. $iFlags = BitOR($iFlags, $TPM_LEFTALIGN)
  973. Case 2
  974. $iFlags = BitOR($iFlags, $TPM_RIGHTALIGN)
  975. Case Else
  976. $iFlags = BitOR($iFlags, $TPM_CENTERALIGN)
  977. EndSwitch
  978. Switch $iAlignY
  979. Case 1
  980. $iFlags = BitOR($iFlags, $TPM_TOPALIGN)
  981. Case 2
  982. $iFlags = BitOR($iFlags, $TPM_VCENTERALIGN)
  983. Case Else
  984. $iFlags = BitOR($iFlags, $TPM_BOTTOMALIGN)
  985. EndSwitch
  986. If BitAND($iNotify, 1) <> 0 Then $iFlags = BitOR($iFlags, $TPM_NONOTIFY)
  987. If BitAND($iNotify, 2) <> 0 Then $iFlags = BitOR($iFlags, $TPM_RETURNCMD)
  988. Switch $iButtons
  989. Case 1
  990. $iFlags = BitOR($iFlags, $TPM_RIGHTBUTTON)
  991. Case Else
  992. $iFlags = BitOR($iFlags, $TPM_LEFTBUTTON)
  993. EndSwitch
  994. Local $aResult = DllCall("user32.dll", "bool", "TrackPopupMenu", "handle", $hMenu, "uint", $iFlags, "int", $iX, "int", $iY, "int", 0, "hwnd", $hWnd, "ptr", 0)
  995. If @error Then Return SetError(@error, @extended, 0)
  996. Return $aResult[0]
  997. EndFunc ;==>_GUICtrlMenu_TrackPopupMenu