GuiHeader.au3 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867
  1. #include-once
  2. #include "HeaderConstants.au3"
  3. #include "Memory.au3"
  4. #include "SendMessage.au3"
  5. #include "StructureConstants.au3"
  6. #include "UDFGlobalID.au3"
  7. #include "WinAPIConv.au3"
  8. #include "WinAPIHObj.au3"
  9. #include "WinAPISysInternals.au3"
  10. ; #INDEX# =======================================================================================================================
  11. ; Title .........: Header
  12. ; AutoIt Version : 3.3.14.5
  13. ; Description ...: Functions that assist with Header control management.
  14. ; A header control is a window that is usually positioned above columns of text or numbers. It contains a title
  15. ; for each column, and it can be divided into parts.
  16. ; Author(s) .....: Paul Campbell (PaulIA)
  17. ; ===============================================================================================================================
  18. ; #VARIABLES# ===================================================================================================================
  19. Global $__g_hHDRLastWnd
  20. ; ===============================================================================================================================
  21. ; #CONSTANTS# ===================================================================================================================
  22. Global Const $__HEADERCONSTANT_ClassName = "SysHeader32"
  23. Global Const $__HEADERCONSTANT_DEFAULT_GUI_FONT = 17
  24. Global Const $__HEADERCONSTANT_SWP_SHOWWINDOW = 0x0040
  25. ; ===============================================================================================================================
  26. ; #CURRENT# =====================================================================================================================
  27. ; _GUICtrlHeader_AddItem
  28. ; _GUICtrlHeader_ClearFilter
  29. ; _GUICtrlHeader_ClearFilterAll
  30. ; _GUICtrlHeader_Create
  31. ; _GUICtrlHeader_CreateDragImage
  32. ; _GUICtrlHeader_DeleteItem
  33. ; _GUICtrlHeader_Destroy
  34. ; _GUICtrlHeader_EditFilter
  35. ; _GUICtrlHeader_GetBitmapMargin
  36. ; _GUICtrlHeader_GetImageList
  37. ; _GUICtrlHeader_GetItem
  38. ; _GUICtrlHeader_GetItemAlign
  39. ; _GUICtrlHeader_GetItemBitmap
  40. ; _GUICtrlHeader_GetItemCount
  41. ; _GUICtrlHeader_GetItemDisplay
  42. ; _GUICtrlHeader_GetItemFlags
  43. ; _GUICtrlHeader_GetItemFormat
  44. ; _GUICtrlHeader_GetItemImage
  45. ; _GUICtrlHeader_GetItemOrder
  46. ; _GUICtrlHeader_GetItemParam
  47. ; _GUICtrlHeader_GetItemRect
  48. ; _GUICtrlHeader_GetItemRectEx
  49. ; _GUICtrlHeader_GetItemText
  50. ; _GUICtrlHeader_GetItemWidth
  51. ; _GUICtrlHeader_GetOrderArray
  52. ; _GUICtrlHeader_GetUnicodeFormat
  53. ; _GUICtrlHeader_HitTest
  54. ; _GUICtrlHeader_InsertItem
  55. ; _GUICtrlHeader_Layout
  56. ; _GUICtrlHeader_OrderToIndex
  57. ; _GUICtrlHeader_SetBitmapMargin
  58. ; _GUICtrlHeader_SetFilterChangeTimeout
  59. ; _GUICtrlHeader_SetHotDivider
  60. ; _GUICtrlHeader_SetImageList
  61. ; _GUICtrlHeader_SetItem
  62. ; _GUICtrlHeader_SetItemAlign
  63. ; _GUICtrlHeader_SetItemBitmap
  64. ; _GUICtrlHeader_SetItemDisplay
  65. ; _GUICtrlHeader_SetItemFlags
  66. ; _GUICtrlHeader_SetItemFormat
  67. ; _GUICtrlHeader_SetItemImage
  68. ; _GUICtrlHeader_SetItemOrder
  69. ; _GUICtrlHeader_SetItemParam
  70. ; _GUICtrlHeader_SetItemText
  71. ; _GUICtrlHeader_SetItemWidth
  72. ; _GUICtrlHeader_SetOrderArray
  73. ; _GUICtrlHeader_SetUnicodeFormat
  74. ; ===============================================================================================================================
  75. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  76. ; $tagHDHITTESTINFO
  77. ; $tagHDLAYOUT
  78. ; $tagHDTEXTFILTER
  79. ; ===============================================================================================================================
  80. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  81. ; Name...........: $tagHDHITTESTINFO
  82. ; Description ...: Contains information about a hit test
  83. ; Fields ........: X - Horizontal postion to be hit test, in client coordinates
  84. ; Y - Vertical position to be hit test, in client coordinates
  85. ; Flags - Information about the results of a hit test
  86. ; Item - If the hit test is successful, contains the index of the item at the hit test point
  87. ; Author ........: Paul Campbell (PaulIA)
  88. ; Remarks .......: This structure is used with the $HDM_HITTEST message.
  89. ; ===============================================================================================================================
  90. Global Const $tagHDHITTESTINFO = $tagPOINT & ";uint Flags;int Item"
  91. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  92. ; Name...........: $tagHDLAYOUT
  93. ; Description ...: Contains information used to set the size and position of the control
  94. ; Fields ........: Rect - Pointer to a RECT structure that contains the rectangle that the header control will occupy
  95. ; WindowPos - Pointer to a WINDOWPOS structure that receives information about the size/position of the control
  96. ; Author ........: Paul Campbell (PaulIA)
  97. ; Remarks .......: This structure is used with the $HDM_LAYOUT message
  98. ; ===============================================================================================================================
  99. Global Const $tagHDLAYOUT = "ptr Rect;ptr WindowPos"
  100. ; #INTERNAL_USE_ONLY# ===========================================================================================================
  101. ; Name...........: $tagHDTEXTFILTER
  102. ; Description ...: Contains information about header control text filters
  103. ; Fields ........: Text - Pointer to the buffer containing the filter
  104. ; TextMax - The maximum size, in characters, for an edit control buffer
  105. ; Author ........: Paul Campbell (PaulIA)
  106. ; Remarks .......:
  107. ; ===============================================================================================================================
  108. Global Const $tagHDTEXTFILTER = "ptr Text;int TextMax"
  109. ; #FUNCTION# ====================================================================================================================
  110. ; Author ........: Paul Campbell (PaulIA)
  111. ; Modified.......:
  112. ; ===============================================================================================================================
  113. Func _GUICtrlHeader_AddItem($hWnd, $sText, $iWidth = 50, $iAlign = 0, $iImage = -1, $bOnRight = False)
  114. Return _GUICtrlHeader_InsertItem($hWnd, _GUICtrlHeader_GetItemCount($hWnd), $sText, $iWidth, $iAlign, $iImage, $bOnRight)
  115. EndFunc ;==>_GUICtrlHeader_AddItem
  116. ; #FUNCTION# ====================================================================================================================
  117. ; Author ........: Paul Campbell (PaulIA)
  118. ; Modified.......: Gary Frost (gafrost)
  119. ; ===============================================================================================================================
  120. Func _GUICtrlHeader_ClearFilter($hWnd, $iIndex)
  121. Return _SendMessage($hWnd, $HDM_CLEARFILTER, $iIndex) <> 0
  122. EndFunc ;==>_GUICtrlHeader_ClearFilter
  123. ; #FUNCTION# ====================================================================================================================
  124. ; Author ........: Paul Campbell (PaulIA)
  125. ; Modified.......: Gary Frost (gafrost)
  126. ; ===============================================================================================================================
  127. Func _GUICtrlHeader_ClearFilterAll($hWnd)
  128. Return _SendMessage($hWnd, $HDM_CLEARFILTER, -1) <> 0
  129. EndFunc ;==>_GUICtrlHeader_ClearFilterAll
  130. ; #FUNCTION# ====================================================================================================================
  131. ; Author ........: Paul Campbell (PaulIA)
  132. ; Modified.......: Gary Frost
  133. ; ===============================================================================================================================
  134. Func _GUICtrlHeader_Create($hWnd, $iStyle = 0x00000046)
  135. $iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
  136. Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
  137. If @error Then Return SetError(@error, @extended, 0)
  138. Local $hHeader = _WinAPI_CreateWindowEx(0, $__HEADERCONSTANT_ClassName, "", $iStyle, 0, 0, 0, 0, $hWnd, $nCtrlID)
  139. Local $tRECT = _WinAPI_GetClientRect($hWnd)
  140. Local $tWindowPos = _GUICtrlHeader_Layout($hHeader, $tRECT)
  141. Local $iFlags = BitOR(DllStructGetData($tWindowPos, "Flags"), $__HEADERCONSTANT_SWP_SHOWWINDOW)
  142. _WinAPI_SetWindowPos($hHeader, DllStructGetData($tWindowPos, "InsertAfter"), _
  143. DllStructGetData($tWindowPos, "X"), DllStructGetData($tWindowPos, "Y"), _
  144. DllStructGetData($tWindowPos, "CX"), DllStructGetData($tWindowPos, "CY"), $iFlags)
  145. _WinAPI_SetFont($hHeader, _WinAPI_GetStockObject($__HEADERCONSTANT_DEFAULT_GUI_FONT))
  146. Return $hHeader
  147. EndFunc ;==>_GUICtrlHeader_Create
  148. ; #FUNCTION# ====================================================================================================================
  149. ; Author ........: Paul Campbell (PaulIA)
  150. ; Modified.......: Gary Frost (gafrost)
  151. ; ===============================================================================================================================
  152. Func _GUICtrlHeader_CreateDragImage($hWnd, $iIndex)
  153. Return Ptr(_SendMessage($hWnd, $HDM_CREATEDRAGIMAGE, $iIndex))
  154. EndFunc ;==>_GUICtrlHeader_CreateDragImage
  155. ; #FUNCTION# ====================================================================================================================
  156. ; Author ........: Paul Campbell (PaulIA)
  157. ; Modified.......: Gary Frost (gafrost)
  158. ; ===============================================================================================================================
  159. Func _GUICtrlHeader_DeleteItem($hWnd, $iIndex)
  160. Return _SendMessage($hWnd, $HDM_DELETEITEM, $iIndex) <> 0
  161. EndFunc ;==>_GUICtrlHeader_DeleteItem
  162. ; #FUNCTION# ====================================================================================================================
  163. ; Author ........: Gary Frost
  164. ; Modified.......:
  165. ; ===============================================================================================================================
  166. Func _GUICtrlHeader_Destroy(ByRef $hWnd)
  167. If Not _WinAPI_IsClassName($hWnd, $__HEADERCONSTANT_ClassName) Then Return SetError(2, 2, False)
  168. Local $iDestroyed = 0
  169. If IsHWnd($hWnd) Then
  170. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  171. Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
  172. Local $hParent = _WinAPI_GetParent($hWnd)
  173. $iDestroyed = _WinAPI_DestroyWindow($hWnd)
  174. Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
  175. If Not $iRet Then
  176. ; can check for errors here if needed, for debug
  177. EndIf
  178. Else
  179. ; Not Allowed to Destroy Other Applications Control(s)
  180. Return SetError(1, 1, False)
  181. EndIf
  182. Else
  183. $iDestroyed = GUICtrlDelete($hWnd)
  184. EndIf
  185. If $iDestroyed Then $hWnd = 0
  186. Return $iDestroyed <> 0
  187. EndFunc ;==>_GUICtrlHeader_Destroy
  188. ; #FUNCTION# ====================================================================================================================
  189. ; Author ........: Paul Campbell (PaulIA)
  190. ; Modified.......: Gary Frost (gafrost)
  191. ; ===============================================================================================================================
  192. Func _GUICtrlHeader_EditFilter($hWnd, $iIndex, $bDiscard = True)
  193. Return _SendMessage($hWnd, $HDM_EDITFILTER, $iIndex, $bDiscard) <> 0
  194. EndFunc ;==>_GUICtrlHeader_EditFilter
  195. ; #FUNCTION# ====================================================================================================================
  196. ; Author ........: Paul Campbell (PaulIA)
  197. ; Modified.......: Gary Frost (gafrost)
  198. ; ===============================================================================================================================
  199. Func _GUICtrlHeader_GetBitmapMargin($hWnd)
  200. Return _SendMessage($hWnd, $HDM_GETBITMAPMARGIN)
  201. EndFunc ;==>_GUICtrlHeader_GetBitmapMargin
  202. ; #FUNCTION# ====================================================================================================================
  203. ; Author ........: Paul Campbell (PaulIA)
  204. ; Modified.......: Gary Frost (gafrost)
  205. ; ===============================================================================================================================
  206. Func _GUICtrlHeader_GetImageList($hWnd)
  207. Return Ptr(_SendMessage($hWnd, $HDM_GETIMAGELIST))
  208. EndFunc ;==>_GUICtrlHeader_GetImageList
  209. ; #FUNCTION# ====================================================================================================================
  210. ; Author ........: Paul Campbell (PaulIA)
  211. ; Modified.......: Gary Frost (gafrost)
  212. ; ===============================================================================================================================
  213. Func _GUICtrlHeader_GetItem($hWnd, $iIndex, ByRef $tItem)
  214. Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
  215. Local $iRet
  216. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  217. $iRet = _SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
  218. Else
  219. Local $iItem = DllStructGetSize($tItem)
  220. Local $tMemMap
  221. Local $pMemory = _MemInit($hWnd, $iItem, $tMemMap)
  222. _MemWrite($tMemMap, $tItem)
  223. If $bUnicode Then
  224. $iRet = _SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
  225. Else
  226. $iRet = _SendMessage($hWnd, $HDM_GETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
  227. EndIf
  228. _MemRead($tMemMap, $pMemory, $tItem, $iItem)
  229. _MemFree($tMemMap)
  230. EndIf
  231. Return $iRet <> 0
  232. EndFunc ;==>_GUICtrlHeader_GetItem
  233. ; #FUNCTION# ====================================================================================================================
  234. ; Author ........: Paul Campbell (PaulIA)
  235. ; Modified.......:
  236. ; ===============================================================================================================================
  237. Func _GUICtrlHeader_GetItemAlign($hWnd, $iIndex)
  238. Switch BitAND(_GUICtrlHeader_GetItemFormat($hWnd, $iIndex), $HDF_JUSTIFYMASK)
  239. Case $HDF_LEFT
  240. Return 0
  241. Case $HDF_RIGHT
  242. Return 1
  243. Case $HDF_CENTER
  244. Return 2
  245. Case Else
  246. Return -1
  247. EndSwitch
  248. EndFunc ;==>_GUICtrlHeader_GetItemAlign
  249. ; #FUNCTION# ====================================================================================================================
  250. ; Author ........: Paul Campbell (PaulIA)
  251. ; Modified.......: Gary Frost (gafrost)
  252. ; ===============================================================================================================================
  253. Func _GUICtrlHeader_GetItemBitmap($hWnd, $iIndex)
  254. Local $tItem = DllStructCreate($tagHDITEM)
  255. DllStructSetData($tItem, "Mask", $HDI_BITMAP)
  256. _GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
  257. Return DllStructGetData($tItem, "hBmp")
  258. EndFunc ;==>_GUICtrlHeader_GetItemBitmap
  259. ; #FUNCTION# ====================================================================================================================
  260. ; Author ........: Paul Campbell (PaulIA)
  261. ; Modified.......: Gary Frost (gafrost)
  262. ; ===============================================================================================================================
  263. Func _GUICtrlHeader_GetItemCount($hWnd)
  264. Return _SendMessage($hWnd, $HDM_GETITEMCOUNT)
  265. EndFunc ;==>_GUICtrlHeader_GetItemCount
  266. ; #FUNCTION# ====================================================================================================================
  267. ; Author ........: Paul Campbell (PaulIA)
  268. ; Modified.......:
  269. ; ===============================================================================================================================
  270. Func _GUICtrlHeader_GetItemDisplay($hWnd, $iIndex)
  271. Local $iRet = 0
  272. Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
  273. If BitAND($iFormat, $HDF_BITMAP) <> 0 Then $iRet = BitOR($iRet, 1)
  274. If BitAND($iFormat, $HDF_BITMAP_ON_RIGHT) <> 0 Then $iRet = BitOR($iRet, 2)
  275. If BitAND($iFormat, $HDF_OWNERDRAW) <> 0 Then $iRet = BitOR($iRet, 4)
  276. If BitAND($iFormat, $HDF_STRING) <> 0 Then $iRet = BitOR($iRet, 8)
  277. Return $iRet
  278. EndFunc ;==>_GUICtrlHeader_GetItemDisplay
  279. ; #FUNCTION# ====================================================================================================================
  280. ; Author ........: Paul Campbell (PaulIA)
  281. ; Modified.......:
  282. ; ===============================================================================================================================
  283. Func _GUICtrlHeader_GetItemFlags($hWnd, $iIndex)
  284. Local $iRet = 0
  285. Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
  286. If BitAND($iFormat, $HDF_IMAGE) <> 0 Then $iRet = BitOR($iRet, 1)
  287. If BitAND($iFormat, $HDF_RTLREADING) <> 0 Then $iRet = BitOR($iRet, 2)
  288. If BitAND($iFormat, $HDF_SORTDOWN) <> 0 Then $iRet = BitOR($iRet, 4)
  289. If BitAND($iFormat, $HDF_SORTUP) <> 0 Then $iRet = BitOR($iRet, 8)
  290. Return $iRet
  291. EndFunc ;==>_GUICtrlHeader_GetItemFlags
  292. ; #FUNCTION# ====================================================================================================================
  293. ; Author ........: Paul Campbell (PaulIA)
  294. ; Modified.......: Gary Frost (gafrost)
  295. ; ===============================================================================================================================
  296. Func _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
  297. Local $tItem = DllStructCreate($tagHDITEM)
  298. DllStructSetData($tItem, "Mask", $HDI_FORMAT)
  299. _GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
  300. Return DllStructGetData($tItem, "Fmt")
  301. EndFunc ;==>_GUICtrlHeader_GetItemFormat
  302. ; #FUNCTION# ====================================================================================================================
  303. ; Author ........: Paul Campbell (PaulIA)
  304. ; Modified.......: Gary Frost (gafrost)
  305. ; ===============================================================================================================================
  306. Func _GUICtrlHeader_GetItemImage($hWnd, $iIndex)
  307. Local $tItem = DllStructCreate($tagHDITEM)
  308. DllStructSetData($tItem, "Mask", $HDI_IMAGE)
  309. _GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
  310. Return DllStructGetData($tItem, "Image")
  311. EndFunc ;==>_GUICtrlHeader_GetItemImage
  312. ; #FUNCTION# ====================================================================================================================
  313. ; Author ........: Paul Campbell (PaulIA)
  314. ; Modified.......: Gary Frost (gafrost)
  315. ; ===============================================================================================================================
  316. Func _GUICtrlHeader_GetItemOrder($hWnd, $iIndex)
  317. Local $tItem = DllStructCreate($tagHDITEM)
  318. DllStructSetData($tItem, "Mask", $HDI_ORDER)
  319. _GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
  320. Return DllStructGetData($tItem, "Order")
  321. EndFunc ;==>_GUICtrlHeader_GetItemOrder
  322. ; #FUNCTION# ====================================================================================================================
  323. ; Author ........: Paul Campbell (PaulIA)
  324. ; Modified.......: Gary Frost (gafrost)
  325. ; ===============================================================================================================================
  326. Func _GUICtrlHeader_GetItemParam($hWnd, $iIndex)
  327. Local $tItem = DllStructCreate($tagHDITEM)
  328. DllStructSetData($tItem, "Mask", $HDI_PARAM)
  329. _GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
  330. Return DllStructGetData($tItem, "Param")
  331. EndFunc ;==>_GUICtrlHeader_GetItemParam
  332. ; #FUNCTION# ====================================================================================================================
  333. ; Author ........: Paul Campbell (PaulIA)
  334. ; Modified.......: Gary Frost (gafrost)
  335. ; ===============================================================================================================================
  336. Func _GUICtrlHeader_GetItemRect($hWnd, $iIndex)
  337. Local $aRect[4]
  338. Local $tRECT = _GUICtrlHeader_GetItemRectEx($hWnd, $iIndex)
  339. $aRect[0] = DllStructGetData($tRECT, "Left")
  340. $aRect[1] = DllStructGetData($tRECT, "Top")
  341. $aRect[2] = DllStructGetData($tRECT, "Right")
  342. $aRect[3] = DllStructGetData($tRECT, "Bottom")
  343. Return $aRect
  344. EndFunc ;==>_GUICtrlHeader_GetItemRect
  345. ; #FUNCTION# ====================================================================================================================
  346. ; Author ........: Paul Campbell (PaulIA)
  347. ; Modified.......: Gary Frost (gafrost)
  348. ; ===============================================================================================================================
  349. Func _GUICtrlHeader_GetItemRectEx($hWnd, $iIndex)
  350. Local $tRECT = DllStructCreate($tagRECT)
  351. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  352. _SendMessage($hWnd, $HDM_GETITEMRECT, $iIndex, $tRECT, 0, "wparam", "struct*")
  353. Else
  354. Local $iRect = DllStructGetSize($tRECT)
  355. Local $tMemMap
  356. Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
  357. _MemWrite($tMemMap, $tRECT)
  358. _SendMessage($hWnd, $HDM_GETITEMRECT, $iIndex, $pMemory, 0, "wparam", "ptr")
  359. _MemRead($tMemMap, $pMemory, $tRECT, $iRect)
  360. _MemFree($tMemMap)
  361. EndIf
  362. Return $tRECT
  363. EndFunc ;==>_GUICtrlHeader_GetItemRectEx
  364. ; #FUNCTION# ====================================================================================================================
  365. ; Author ........: Paul Campbell (PaulIA)
  366. ; Modified.......: Gary Frost (gafrost)
  367. ; ===============================================================================================================================
  368. Func _GUICtrlHeader_GetItemText($hWnd, $iIndex)
  369. Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
  370. Local $tBuffer
  371. If $bUnicode Then
  372. $tBuffer = DllStructCreate("wchar Text[4096]")
  373. Else
  374. $tBuffer = DllStructCreate("char Text[4096]")
  375. EndIf
  376. Local $tItem = DllStructCreate($tagHDITEM)
  377. DllStructSetData($tItem, "Mask", $HDI_TEXT)
  378. DllStructSetData($tItem, "TextMax", 4096)
  379. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  380. DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
  381. _SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
  382. Else
  383. Local $iItem = DllStructGetSize($tItem)
  384. Local $tMemMap
  385. Local $pMemory = _MemInit($hWnd, $iItem + DllStructGetSize($tBuffer), $tMemMap)
  386. Local $pText = $pMemory + $iItem
  387. DllStructSetData($tItem, "Text", $pText)
  388. _MemWrite($tMemMap, $tItem, $pMemory, $iItem)
  389. If $bUnicode Then
  390. _SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
  391. Else
  392. _SendMessage($hWnd, $HDM_GETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
  393. EndIf
  394. _MemRead($tMemMap, $pText, $tBuffer, DllStructGetSize($tBuffer))
  395. _MemFree($tMemMap)
  396. EndIf
  397. Return DllStructGetData($tBuffer, "Text")
  398. EndFunc ;==>_GUICtrlHeader_GetItemText
  399. ; #FUNCTION# ====================================================================================================================
  400. ; Author ........: Paul Campbell (PaulIA)
  401. ; Modified.......: Gary Frost (gafrost)
  402. ; ===============================================================================================================================
  403. Func _GUICtrlHeader_GetItemWidth($hWnd, $iIndex)
  404. Local $tItem = DllStructCreate($tagHDITEM)
  405. DllStructSetData($tItem, "Mask", $HDI_WIDTH)
  406. _GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
  407. Return DllStructGetData($tItem, "XY")
  408. EndFunc ;==>_GUICtrlHeader_GetItemWidth
  409. ; #FUNCTION# ====================================================================================================================
  410. ; Author ........: Paul Campbell (PaulIA)
  411. ; Modified.......: Gary Frost (gafrost)
  412. ; ===============================================================================================================================
  413. Func _GUICtrlHeader_GetOrderArray($hWnd)
  414. Local $iItems = _GUICtrlHeader_GetItemCount($hWnd)
  415. Local $tBuffer = DllStructCreate("int[" & $iItems & "]")
  416. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  417. _SendMessage($hWnd, $HDM_GETORDERARRAY, $iItems, $tBuffer, 0, "wparam", "struct*")
  418. Else
  419. Local $iBuffer = DllStructGetSize($tBuffer)
  420. Local $tMemMap
  421. Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
  422. _SendMessage($hWnd, $HDM_GETORDERARRAY, $iItems, $pMemory, 0, "wparam", "ptr")
  423. _MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
  424. _MemFree($tMemMap)
  425. EndIf
  426. Local $aBuffer[$iItems + 1]
  427. $aBuffer[0] = $iItems
  428. For $iI = 1 To $iItems
  429. $aBuffer[$iI] = DllStructGetData($tBuffer, 1, $iI)
  430. Next
  431. Return $aBuffer
  432. EndFunc ;==>_GUICtrlHeader_GetOrderArray
  433. ; #FUNCTION# ====================================================================================================================
  434. ; Author ........: Paul Campbell (PaulIA)
  435. ; Modified.......: Gary Frost (gafrost)
  436. ; ===============================================================================================================================
  437. Func _GUICtrlHeader_GetUnicodeFormat($hWnd)
  438. Return _SendMessage($hWnd, $HDM_GETUNICODEFORMAT) <> 0
  439. EndFunc ;==>_GUICtrlHeader_GetUnicodeFormat
  440. ; #FUNCTION# ====================================================================================================================
  441. ; Author ........: Paul Campbell (PaulIA)
  442. ; Modified.......: Gary Frost (gafrost)
  443. ; ===============================================================================================================================
  444. Func _GUICtrlHeader_HitTest($hWnd, $iX, $iY)
  445. Local $tTest = DllStructCreate($tagHDHITTESTINFO)
  446. DllStructSetData($tTest, "X", $iX)
  447. DllStructSetData($tTest, "Y", $iY)
  448. Local $aTest[11]
  449. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  450. $aTest[0] = _SendMessage($hWnd, $HDM_HITTEST, 0, $tTest, 0, "wparam", "struct*")
  451. Else
  452. Local $iTest = DllStructGetSize($tTest)
  453. Local $tMemMap
  454. Local $pMemory = _MemInit($hWnd, $iTest, $tMemMap)
  455. _MemWrite($tMemMap, $tTest)
  456. $aTest[0] = _SendMessage($hWnd, $HDM_HITTEST, 0, $pMemory, 0, "wparam", "ptr")
  457. _MemRead($tMemMap, $pMemory, $tTest, $iTest)
  458. _MemFree($tMemMap)
  459. EndIf
  460. Local $iFlags = DllStructGetData($tTest, "Flags")
  461. $aTest[1] = BitAND($iFlags, $HHT_NOWHERE) <> 0
  462. $aTest[2] = BitAND($iFlags, $HHT_ONHEADER) <> 0
  463. $aTest[3] = BitAND($iFlags, $HHT_ONDIVIDER) <> 0
  464. $aTest[4] = BitAND($iFlags, $HHT_ONDIVOPEN) <> 0
  465. $aTest[5] = BitAND($iFlags, $HHT_ONFILTER) <> 0
  466. $aTest[6] = BitAND($iFlags, $HHT_ONFILTERBUTTON) <> 0
  467. $aTest[7] = BitAND($iFlags, $HHT_ABOVE) <> 0
  468. $aTest[8] = BitAND($iFlags, $HHT_BELOW) <> 0
  469. $aTest[9] = BitAND($iFlags, $HHT_TORIGHT) <> 0
  470. $aTest[10] = BitAND($iFlags, $HHT_TOLEFT) <> 0
  471. Return $aTest
  472. EndFunc ;==>_GUICtrlHeader_HitTest
  473. ; #FUNCTION# ====================================================================================================================
  474. ; Author ........: Paul Campbell (PaulIA)
  475. ; Modified.......: Gary Frost (gafrost)
  476. ; ===============================================================================================================================
  477. Func _GUICtrlHeader_InsertItem($hWnd, $iIndex, $sText, $iWidth = 50, $iAlign = 0, $iImage = -1, $bOnRight = False)
  478. Local $aAlign[3] = [$HDF_LEFT, $HDF_RIGHT, $HDF_CENTER]
  479. Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
  480. Local $pBuffer, $iBuffer
  481. If $sText <> -1 Then
  482. $iBuffer = StringLen($sText) + 1
  483. Local $tBuffer
  484. If $bUnicode Then
  485. $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
  486. $iBuffer *= 2
  487. Else
  488. $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
  489. EndIf
  490. DllStructSetData($tBuffer, "Text", $sText)
  491. $pBuffer = DllStructGetPtr($tBuffer)
  492. Else
  493. $iBuffer = 0
  494. $pBuffer = -1 ; LPSTR_TEXTCALLBACK
  495. EndIf
  496. Local $tItem = DllStructCreate($tagHDITEM)
  497. Local $iFmt = $aAlign[$iAlign]
  498. Local $iMask = BitOR($HDI_WIDTH, $HDI_FORMAT)
  499. If $sText <> "" Then
  500. $iMask = BitOR($iMask, $HDI_TEXT)
  501. $iFmt = BitOR($iFmt, $HDF_STRING)
  502. EndIf
  503. If $iImage <> -1 Then
  504. $iMask = BitOR($iMask, $HDI_IMAGE)
  505. $iFmt = BitOR($iFmt, $HDF_IMAGE)
  506. EndIf
  507. If $bOnRight Then $iFmt = BitOR($iFmt, $HDF_BITMAP_ON_RIGHT)
  508. DllStructSetData($tItem, "Mask", $iMask)
  509. DllStructSetData($tItem, "XY", $iWidth)
  510. DllStructSetData($tItem, "Fmt", $iFmt)
  511. DllStructSetData($tItem, "Image", $iImage)
  512. Local $iRet
  513. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  514. DllStructSetData($tItem, "Text", $pBuffer)
  515. $iRet = _SendMessage($hWnd, $HDM_INSERTITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
  516. Else
  517. Local $iItem = DllStructGetSize($tItem)
  518. Local $tMemMap
  519. Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
  520. If $sText <> -1 Then
  521. Local $pText = $pMemory + $iItem
  522. DllStructSetData($tItem, "Text", $pText)
  523. _MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
  524. Else
  525. DllStructSetData($tItem, "Text", -1) ; LPSTR_TEXTCALLBACK
  526. EndIf
  527. _MemWrite($tMemMap, $tItem, $pMemory, $iItem)
  528. If $bUnicode Then
  529. $iRet = _SendMessage($hWnd, $HDM_INSERTITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
  530. Else
  531. $iRet = _SendMessage($hWnd, $HDM_INSERTITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
  532. EndIf
  533. _MemFree($tMemMap)
  534. EndIf
  535. Return $iRet
  536. EndFunc ;==>_GUICtrlHeader_InsertItem
  537. ; #FUNCTION# ====================================================================================================================
  538. ; Author ........: Paul Campbell (PaulIA)
  539. ; Modified.......: Gary Frost (gafrost)
  540. ; ===============================================================================================================================
  541. Func _GUICtrlHeader_Layout($hWnd, ByRef $tRECT)
  542. Local $tLayout = DllStructCreate($tagHDLAYOUT)
  543. Local $tWindowPos = DllStructCreate($tagWINDOWPOS)
  544. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  545. DllStructSetData($tLayout, "Rect", DllStructGetPtr($tRECT))
  546. DllStructSetData($tLayout, "WindowPos", DllStructGetPtr($tWindowPos))
  547. _SendMessage($hWnd, $HDM_LAYOUT, 0, $tLayout, 0, "wparam", "struct*")
  548. Else
  549. Local $iLayout = DllStructGetSize($tLayout)
  550. Local $iRect = DllStructGetSize($tRECT)
  551. Local $iWindowPos = DllStructGetSize($tWindowPos)
  552. Local $tMemMap
  553. Local $pMemory = _MemInit($hWnd, $iLayout + $iRect + $iWindowPos, $tMemMap)
  554. DllStructSetData($tLayout, "Rect", $pMemory + $iLayout)
  555. DllStructSetData($tLayout, "WindowPos", $pMemory + $iLayout + $iRect)
  556. _MemWrite($tMemMap, $tLayout, $pMemory, $iLayout)
  557. _MemWrite($tMemMap, $tRECT, $pMemory + $iLayout, $iRect)
  558. _SendMessage($hWnd, $HDM_LAYOUT, 0, $pMemory, 0, "wparam", "ptr")
  559. _MemRead($tMemMap, $pMemory + $iLayout + $iRect, $tWindowPos, $iWindowPos)
  560. _MemFree($tMemMap)
  561. EndIf
  562. Return $tWindowPos
  563. EndFunc ;==>_GUICtrlHeader_Layout
  564. ; #FUNCTION# ====================================================================================================================
  565. ; Author ........: Paul Campbell (PaulIA)
  566. ; Modified.......: Gary Frost (gafrost)
  567. ; ===============================================================================================================================
  568. Func _GUICtrlHeader_OrderToIndex($hWnd, $iOrder)
  569. Return _SendMessage($hWnd, $HDM_ORDERTOINDEX, $iOrder)
  570. EndFunc ;==>_GUICtrlHeader_OrderToIndex
  571. ; #FUNCTION# ====================================================================================================================
  572. ; Author ........: Paul Campbell (PaulIA)
  573. ; Modified.......: Gary Frost (gafrost)
  574. ; ===============================================================================================================================
  575. Func _GUICtrlHeader_SetBitmapMargin($hWnd, $iWidth)
  576. Return _SendMessage($hWnd, $HDM_SETBITMAPMARGIN, $iWidth)
  577. EndFunc ;==>_GUICtrlHeader_SetBitmapMargin
  578. ; #FUNCTION# ====================================================================================================================
  579. ; Author ........: Paul Campbell (PaulIA)
  580. ; Modified.......: Gary Frost (gafrost)
  581. ; ===============================================================================================================================
  582. Func _GUICtrlHeader_SetFilterChangeTimeout($hWnd, $iTimeOut)
  583. Return _SendMessage($hWnd, $HDM_SETFILTERCHANGETIMEOUT, 0, $iTimeOut)
  584. EndFunc ;==>_GUICtrlHeader_SetFilterChangeTimeout
  585. ; #FUNCTION# ====================================================================================================================
  586. ; Author ........: Paul Campbell (PaulIA)
  587. ; Modified.......: Gary Frost (gafrost)
  588. ; ===============================================================================================================================
  589. Func _GUICtrlHeader_SetHotDivider($hWnd, $iFlag, $iInputValue)
  590. Return _SendMessage($hWnd, $HDM_SETHOTDIVIDER, $iFlag, $iInputValue)
  591. EndFunc ;==>_GUICtrlHeader_SetHotDivider
  592. ; #FUNCTION# ====================================================================================================================
  593. ; Author ........: Paul Campbell (PaulIA)
  594. ; Modified.......: Gary Frost (gafrost)
  595. ; ===============================================================================================================================
  596. Func _GUICtrlHeader_SetImageList($hWnd, $hImage)
  597. Return _SendMessage($hWnd, $HDM_SETIMAGELIST, 0, $hImage, 0, "wparam", "handle", "handle")
  598. EndFunc ;==>_GUICtrlHeader_SetImageList
  599. ; #FUNCTION# ====================================================================================================================
  600. ; Author ........: Paul Campbell (PaulIA)
  601. ; Modified.......: Gary Frost (gafrost)
  602. ; ===============================================================================================================================
  603. Func _GUICtrlHeader_SetItem($hWnd, $iIndex, ByRef $tItem)
  604. Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
  605. Local $iRet
  606. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  607. $iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
  608. Else
  609. Local $iItem = DllStructGetSize($tItem)
  610. Local $tMemMap
  611. Local $pMemory = _MemInit($hWnd, $iItem, $tMemMap)
  612. _MemWrite($tMemMap, $tItem)
  613. If $bUnicode Then
  614. $iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
  615. Else
  616. $iRet = _SendMessage($hWnd, $HDM_SETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
  617. EndIf
  618. _MemFree($tMemMap)
  619. EndIf
  620. Return $iRet <> 0
  621. EndFunc ;==>_GUICtrlHeader_SetItem
  622. ; #FUNCTION# ====================================================================================================================
  623. ; Author ........: Paul Campbell (PaulIA)
  624. ; Modified.......:
  625. ; ===============================================================================================================================
  626. Func _GUICtrlHeader_SetItemAlign($hWnd, $iIndex, $iAlign)
  627. Local $aAlign[3] = [$HDF_LEFT, $HDF_RIGHT, $HDF_CENTER]
  628. Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
  629. $iFormat = BitAND($iFormat, BitNOT($HDF_JUSTIFYMASK))
  630. $iFormat = BitOR($iFormat, $aAlign[$iAlign])
  631. Return _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
  632. EndFunc ;==>_GUICtrlHeader_SetItemAlign
  633. ; #FUNCTION# ====================================================================================================================
  634. ; Author ........: Paul Campbell (PaulIA)
  635. ; Modified.......: Gary Frost (gafrost)
  636. ; ===============================================================================================================================
  637. Func _GUICtrlHeader_SetItemBitmap($hWnd, $iIndex, $hBitmap)
  638. Local $tItem = DllStructCreate($tagHDITEM)
  639. DllStructSetData($tItem, "Mask", BitOR($HDI_FORMAT, $HDI_BITMAP))
  640. DllStructSetData($tItem, "Fmt", $HDF_BITMAP)
  641. DllStructSetData($tItem, "hBMP", $hBitmap)
  642. Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
  643. EndFunc ;==>_GUICtrlHeader_SetItemBitmap
  644. ; #FUNCTION# ====================================================================================================================
  645. ; Author ........: Paul Campbell (PaulIA)
  646. ; Modified.......:
  647. ; ===============================================================================================================================
  648. Func _GUICtrlHeader_SetItemDisplay($hWnd, $iIndex, $iDisplay)
  649. Local $iFormat = BitAND(_GUICtrlHeader_GetItemFormat($hWnd, $iIndex), Not $HDF_DISPLAYMASK)
  650. If BitAND($iDisplay, 1) <> 0 Then $iFormat = BitOR($iFormat, $HDF_BITMAP)
  651. If BitAND($iDisplay, 2) <> 0 Then $iFormat = BitOR($iFormat, $HDF_BITMAP_ON_RIGHT)
  652. If BitAND($iDisplay, 4) <> 0 Then $iFormat = BitOR($iFormat, $HDF_OWNERDRAW)
  653. If BitAND($iDisplay, 8) <> 0 Then $iFormat = BitOR($iFormat, $HDF_STRING)
  654. Return _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
  655. EndFunc ;==>_GUICtrlHeader_SetItemDisplay
  656. ; #FUNCTION# ====================================================================================================================
  657. ; Author ........: Paul Campbell (PaulIA)
  658. ; Modified.......:
  659. ; ===============================================================================================================================
  660. Func _GUICtrlHeader_SetItemFlags($hWnd, $iIndex, $iFlags)
  661. Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
  662. $iFormat = BitAND($iFormat, BitNOT($HDF_FLAGMASK))
  663. If BitAND($iFlags, 1) <> 0 Then $iFormat = BitOR($iFormat, $HDF_IMAGE)
  664. If BitAND($iFlags, 2) <> 0 Then $iFormat = BitOR($iFormat, $HDF_RTLREADING)
  665. If BitAND($iFlags, 4) <> 0 Then $iFormat = BitOR($iFormat, $HDF_SORTDOWN)
  666. If BitAND($iFlags, 8) <> 0 Then $iFormat = BitOR($iFormat, $HDF_SORTUP)
  667. Return _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
  668. EndFunc ;==>_GUICtrlHeader_SetItemFlags
  669. ; #FUNCTION# ====================================================================================================================
  670. ; Author ........: Paul Campbell (PaulIA)
  671. ; Modified.......: Gary Frost (gafrost)
  672. ; ===============================================================================================================================
  673. Func _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
  674. Local $tItem = DllStructCreate($tagHDITEM)
  675. DllStructSetData($tItem, "Mask", $HDI_FORMAT)
  676. DllStructSetData($tItem, "Fmt", $iFormat)
  677. Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
  678. EndFunc ;==>_GUICtrlHeader_SetItemFormat
  679. ; #FUNCTION# ====================================================================================================================
  680. ; Author ........: Paul Campbell (PaulIA)
  681. ; Modified.......: Gary Frost (gafrost)
  682. ; ===============================================================================================================================
  683. Func _GUICtrlHeader_SetItemImage($hWnd, $iIndex, $iImage)
  684. Local $tItem = DllStructCreate($tagHDITEM)
  685. DllStructSetData($tItem, "Mask", $HDI_IMAGE)
  686. DllStructSetData($tItem, "Image", $iImage)
  687. Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
  688. EndFunc ;==>_GUICtrlHeader_SetItemImage
  689. ; #FUNCTION# ====================================================================================================================
  690. ; Author ........: Paul Campbell (PaulIA)
  691. ; Modified.......: Gary Frost (gafrost)
  692. ; ===============================================================================================================================
  693. Func _GUICtrlHeader_SetItemOrder($hWnd, $iIndex, $iOrder)
  694. Local $tItem = DllStructCreate($tagHDITEM)
  695. DllStructSetData($tItem, "Mask", $HDI_ORDER)
  696. DllStructSetData($tItem, "Order", $iOrder)
  697. Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
  698. EndFunc ;==>_GUICtrlHeader_SetItemOrder
  699. ; #FUNCTION# ====================================================================================================================
  700. ; Author ........: Paul Campbell (PaulIA)
  701. ; Modified.......: Gary Frost (gafrost)
  702. ; ===============================================================================================================================
  703. Func _GUICtrlHeader_SetItemParam($hWnd, $iIndex, $iParam)
  704. Local $tItem = DllStructCreate($tagHDITEM)
  705. DllStructSetData($tItem, "Mask", $HDI_PARAM)
  706. DllStructSetData($tItem, "Param", $iParam)
  707. Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
  708. EndFunc ;==>_GUICtrlHeader_SetItemParam
  709. ; #FUNCTION# ====================================================================================================================
  710. ; Author ........: Paul Campbell (PaulIA)
  711. ; Modified.......: Gary Frost (gafrost)
  712. ; ===============================================================================================================================
  713. Func _GUICtrlHeader_SetItemText($hWnd, $iIndex, $sText)
  714. Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
  715. Local $iBuffer, $pBuffer
  716. If $sText <> -1 Then
  717. $iBuffer = StringLen($sText) + 1
  718. Local $tBuffer
  719. If $bUnicode Then
  720. $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
  721. $iBuffer *= 2
  722. Else
  723. $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
  724. EndIf
  725. DllStructSetData($tBuffer, "Text", $sText)
  726. $pBuffer = DllStructGetPtr($tBuffer)
  727. Else
  728. $iBuffer = 0
  729. $pBuffer = -1 ; LPSTR_TEXTCALLBACK
  730. EndIf
  731. Local $tItem = DllStructCreate($tagHDITEM)
  732. DllStructSetData($tItem, "Mask", $HDI_TEXT)
  733. DllStructSetData($tItem, "TextMax", $iBuffer)
  734. Local $iRet
  735. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  736. DllStructSetData($tItem, "Text", $pBuffer)
  737. $iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
  738. Else
  739. Local $iItem = DllStructGetSize($tItem)
  740. Local $tMemMap
  741. Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
  742. If $sText <> -1 Then
  743. Local $pText = $pMemory + $iItem
  744. DllStructSetData($tItem, "Text", $pText)
  745. _MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
  746. Else
  747. DllStructSetData($tItem, "Text", -1) ; LPSTR_TEXTCALLBACK
  748. EndIf
  749. _MemWrite($tMemMap, $tItem, $pMemory, $iItem)
  750. If $bUnicode Then
  751. $iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
  752. Else
  753. $iRet = _SendMessage($hWnd, $HDM_SETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
  754. EndIf
  755. _MemFree($tMemMap)
  756. EndIf
  757. Return $iRet <> 0
  758. EndFunc ;==>_GUICtrlHeader_SetItemText
  759. ; #FUNCTION# ====================================================================================================================
  760. ; Author ........: Paul Campbell (PaulIA)
  761. ; Modified.......: Gary Frost (gafrost)
  762. ; ===============================================================================================================================
  763. Func _GUICtrlHeader_SetItemWidth($hWnd, $iIndex, $iWidth)
  764. Local $tItem = DllStructCreate($tagHDITEM)
  765. DllStructSetData($tItem, "Mask", $HDI_WIDTH)
  766. DllStructSetData($tItem, "XY", $iWidth)
  767. Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
  768. EndFunc ;==>_GUICtrlHeader_SetItemWidth
  769. ; #FUNCTION# ====================================================================================================================
  770. ; Author ........: Paul Campbell (PaulIA)
  771. ; Modified.......: Gary Frost (gafrost)
  772. ; ===============================================================================================================================
  773. Func _GUICtrlHeader_SetOrderArray($hWnd, ByRef $aOrder)
  774. Local $tBuffer = DllStructCreate("int[" & $aOrder[0] & "]")
  775. For $iI = 1 To $aOrder[0]
  776. DllStructSetData($tBuffer, 1, $aOrder[$iI], $iI)
  777. Next
  778. Local $iRet
  779. If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
  780. $iRet = _SendMessage($hWnd, $HDM_SETORDERARRAY, $aOrder[0], $tBuffer, 0, "wparam", "struct*")
  781. Else
  782. Local $iBuffer = DllStructGetSize($tBuffer)
  783. Local $tMemMap
  784. Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
  785. _MemWrite($tMemMap, $tBuffer)
  786. $iRet = _SendMessage($hWnd, $HDM_SETORDERARRAY, $aOrder[0], $pMemory, 0, "wparam", "ptr")
  787. _MemFree($tMemMap)
  788. EndIf
  789. Return $iRet <> 0
  790. EndFunc ;==>_GUICtrlHeader_SetOrderArray
  791. ; #FUNCTION# ====================================================================================================================
  792. ; Author ........: Paul Campbell (PaulIA)
  793. ; Modified.......: Gary Frost (gafrost)
  794. ; ===============================================================================================================================
  795. Func _GUICtrlHeader_SetUnicodeFormat($hWnd, $bUnicode)
  796. Return _SendMessage($hWnd, $HDM_SETUNICODEFORMAT, $bUnicode)
  797. EndFunc ;==>_GUICtrlHeader_SetUnicodeFormat