Code: Select all
Global OriginProc.l ,lb
#ODS_SELECTED=1
#ODS_GRAYED=2
#ODS_DISABLED=4
#ODS_CHECKED=8
#ODS_FOCUS=16
#ODS_DEFAULT= 32
#ODS_COMBOBOXEDIT= 4096
#ODT_STATIC = 5
#SS_OWNERDRAW=13
Structure lvwMsgInfo
x.l
y.l
Flgs.l
Itm.l
SubItm.l
EndStructure
Structure PBDrawingStruct
Type.l
WindowHandle.l
DC.l
ReleaseProcedure.l
EndStructure
mydraw.PBDrawingStruct
mydraw\Type=1
Procedure ListboxProc( hwnd, msg, wParam, lParam)
Select msg
Case #WM_RBUTTONDOWN
DisplayPopupMenu(0, WindowID(0))
ProcedureReturn 0
Case #WM_DRAWITEM
*lpdis.DRAWITEMSTRUCT=lParam
x=*lpdis\rcItem\left
y=*lpdis\rcItem\top
w=*lpdis\rcItem\right-*lpdis\rcItem\left
h=*lpdis\rcItem\bottom-*lpdis\rcItem\top
Select *lpdis\CtlType
Case #ODT_LISTBOX
Debug 44444444
Buffer.s=Space(255):SendMessage_(GadgetID(lb),#LB_GETTEXT,*lpdis\itemID,@Buffer):Col=Val(Buffer)
;StartDrawing(WindowOutput())
Select *lpdis\itemAction
Case #ODA_SELECT
Debug 68888888
;StartDrawing(WindowOutput())
;Box(x,y,w,h,Col|#Black)
;StopDrawing()
Case #ODA_FOCUS
Debug 5656
;DrawingMode(2 | 4):Box(x+1,y+1,w-1,h-1,0):DrawingMode(0)
ProcedureReturn #True
Case #ODA_DRAWENTIRE
hbmpPicture = SendMessage_(*lpdis\hwndItem,#LB_GETITEMDATA, *lpdis\itemID,0)
hdcMem = CreateCompatibleDC_(*lpdis\hdc)
hbmpOld = SelectObject_(hdcMem, hbmpPicture)
BitBlt_(*lpdis\hdc, *lpdis\rcItem\left, *lpdis\rcItem\top, *lpdis\rcItem\right - *lpdis\rcItem\left,*lpdis\rcItem\bottom - *lpdis\rcItem\top, hdcMem, 0, 0, #SRCCOPY)
*buffer.s=Space(255)
SendMessage_(*lpdis\hwndItem, #LB_GETTEXT, *lpdis\itemID, @*buffer)
*tm.TEXTMETRIC
GetTextMetrics_(*lpdis\hdc,@*tm)
y = (*lpdis\rcItem\bottom + *lpdis\rcItem\top -*tm\tmHeight) / 2
TextOut_(*lpdis\hdc,XBITMAP + 6, y, @*tm,MemoryStringLength(*buffer))
SelectObject_(hdcMem, hbmpOld);
DeleteDC_(hdcMem)
ProcedureReturn #True
EndSelect
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(OriginProc,hwnd,msg,wParam,lParam)
EndProcedure
icontouse=CreateImage(10,16,16)
StartDrawing(ImageOutput())
Box(0,0,16,16,#Red)
StopDrawing()
Procedure listbox(parent,number,x,y,width,height)
window=OpenWindow(#PB_Any,x,y,width,height,#PB_Window_BorderLess|#PB_Window_Invisible,"")
SetWindowLong_(WindowID(window),#GWL_STYLE, #WS_CHILD|#WS_DLGFRAME|#WS_EX_CLIENTEDGE|#WS_CLIPCHILDREN|#WS_CLIPSIBLINGS )
SetParent_(WindowID(window),parent)
ShowWindow_(WindowID(window),#SW_SHOW)
CreateGadgetList(WindowID(window))
lb=ListViewGadget(#PB_Any,0,0,width,height,#LBS_OWNERDRAWFIXED|#LBS_HASSTRINGS)
nItem = SendMessage_(GadgetID(lb), #LB_ADDSTRING, 0, "test")
OriginProc= SetWindowLong_(WindowID(window), #GWL_WNDPROC, @ListboxProc())
SendMessage_(GadgetID(lb), #LB_SETITEMDATA, nItem, icontouse)
EndProcedure
UseJPEGImageDecoder()
Dim org.l(100)
If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))
CreateGadgetList(WindowID())
listbox(WindowID(0),0,8,10,100,200)
If CreatePopupMenu(0)
MenuItem(1, "Cut")
MenuItem(2, "Copy")
MenuItem(3, "Paste")
MenuBar()
OpenSubMenu("Options")
MenuItem(4, "Window...")
MenuItem(5, "Gadget...")
CloseSubMenu()
MenuBar()
MenuItem( 6, "Quit")
EndIf
Repeat
EventID.l=WaitWindowEvent()
Select EventID
Case #PB_EventMenu
Select EventMenuID()
Case 0
Case 2
EndSelect
Case #WM_CLOSE
Quit=1
EndSelect
Until Quit=1
EndIf

