
All 3 headers should display white text on a blue background.
Code: Select all
#LVM_GETHEADER = #LVM_FIRST + 31
;...Used in subclass ProceduReturn = result
Global AddressCallback
;...Blue brush for header background color
Global Colour = CreateSolidBrush_(#Blue)
;...Subclass procedure for all 3 ListIconGadgets
Procedure AddressListSubclassed(hwnd, msg, wParam, lParam)
Protected hdi.HD_ITEM
result = CallWindowProc_(AddressCallback, hwnd, msg, wParam, lParam); Used for my first gadget
Select msg
Case #WM_NOTIFY
*pnmh.NMHDR = lParam
If *pnmh\code = #NM_CUSTOMDRAW
*pnmcd.NMCUSTOMDRAW = lParam ; Determine drawing stage
Select *pnmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT ; Get header text.
text$ = Space(100)
hdi\mask = #HDI_TEXT
hdi\pszText = @text$
hdi\cchTextMax = Len(text$)
SendMessage_(*pnmh\hwndFrom, #HDM_GETITEM, *pnmcd\dwItemSpec, hdi) ; Check button state.
If *pnmcd\uItemState & #CDIS_SELECTED
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH | #DFCS_PUSHED) ; Offset text because of the selected button.
InflateRect_(*pnmcd\rc, -1, -1)
Else
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH)
EndIf
; Draw background.
InflateRect_(*pnmcd\rc, -1, -1)
SetBkMode_(*pnmcd\hdc, #TRANSPARENT)
;If *pnmcd\dwItemSpec & 1
FillRect_(*pnmcd\hdc, *pnmcd\rc, Colour)
SetTextColor_(*pnmcd\hdc, #White)
;Else
; FillRect_(*pnmcd\hdc, *pnmcd\rc, Colour)
; SetTextColor_(*pnmcd\hdc, $000000)
;EndIf
DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_LEFT | #DT_VCENTER | #DT_END_ELLIPSIS)
result = #CDRF_SKIPDEFAULT
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 100, 100, 300, 300, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ListIconGadget(0, 5, 5, 290, 90, "Name", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 250)
AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
ListIconGadget(1, 5, 105, 290, 90, "Name", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(1, 1, "Address", 250)
AddGadgetItem(1, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(1, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
ListIconGadget(2, 5, 205, 290, 90, "Name", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(2, 1, "Address", 250)
AddGadgetItem(2, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(2, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
;...Subclass all 3 ListIconGadgets
For g = 0 To 2
AddressCallback = SetWindowLong_(GadgetID(g), #GWL_WNDPROC, @AddressListSubclassed())
Next g
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
DeleteObject_(ColourBlue)
EndIf
EndIf