So ein Schmuh! Man muss #True zurückgeben wenn man die #WM_DRAWITEM Nachricht bearbeitet.
Ok, so gehts:
Code: Alles auswählen
Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_DRAWITEM
*lpdis.DRAWITEMSTRUCT = lParam
; * Draw Background (clearing)
SelectObject_(*lpdis\hDC,GetStockObject_(#WHITE_PEN))
SelectObject_(*lpdis\hDC,GetStockObject_(#WHITE_BRUSH))
Rectangle_(*lpdis\hDC,*lpdis\rcItem\left,*lpdis\rcItem\top,*lpdis\rcItem\right,*lpdis\rcItem\bottom)
; * Draw Caption
Length = SendMessage_(GadgetID(0),#LB_GETTEXTLEN,*lpdis\itemID,0)
lpBuffer = AllocateMemory(Length)
SendMessage_(GadgetID(0),#LB_GETTEXT,*lpdis\itemID,lpBuffer)
TextOut_(*lpdis\hDC,3,*lpdis\rcItem\top + 2,lpBuffer,Length)
FreeMemory(lpBuffer)
; * Draw Selection Border
If *lpdis\itemState & #ODS_SELECTED
SelectObject_(*lpdis\hDC,GetStockObject_(#BLACK_PEN))
SelectObject_(*lpdis\hDC,GetStockObject_(#NULL_BRUSH))
Rectangle_(*lpdis\hDC,*lpdis\rcItem\left,*lpdis\rcItem\top,*lpdis\rcItem\right,*lpdis\rcItem\bottom)
EndIf
ProcedureReturn 1
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,320,240,"void",#WS_OVERLAPPEDWINDOW | 1)
CreateGadgetList(WindowID(0))
ListViewGadget(0,5,5,0,0,#LBS_OWNERDRAWFIXED)
For i=1 To 90
AddGadgetItem(0,-1,"Untitled #" + Str(i))
Next
SetWindowCallback(@WindowCallback())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_SizeWindow
ResizeGadget(0,5,5,WindowWidth(0)-10,WindowHeight(0)-10)
EndIf
Until EventID = #PB_Event_CloseWindow