cOoki3druqs hat geschrieben:
Wie kommt es eigentlich das die Farbe bei XP-Skin nichtmehr genommen wird ^^
Ist wohl so ein Style-Ding. Mußt Du es eben alles selbst zeichnen.
Code:
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Arial", 8, #PB_Font_Underline)
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*pNMHDR.NMHDR = lParam
gadget = GetWindowLongPtr_(*pNMHDR\hwndFrom,#GWL_ID)
If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(2)
*pTVcd.NMTVCUSTOMDRAW = lParam
Select *pTVcd\nmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE | #TVIF_PARAM
tviText$ = Space(100)
tvi\pszText = @tviText$
tvi\cchTextMax = 100
tvi\hItem = *pTVcd\nmcd\dwItemSpec
SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)
If GetGadgetItemData(gadget,tvi\lParam) = 1
SelectObject_(*pTVcd\nmcd\hdc, hFont)
SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
*pTVcd\nmcd\rc\left = 25
DrawText_(*pTVcd\nmcd\hdc,tviText$,Len(tviText$),*pTVcd\nmcd\rc,0)
result = #CDRF_NEWFONT|#CDRF_SKIPDEFAULT
Else
result = #CDRF_DODEFAULT
EndIf
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;And CreateGadgetList(WindowID(0))
TreeGadget(2, 10, 10, 160, 160)
SetWindowCallback(@WinCallback())
For i = 0 To 10
AddGadgetItem (2, -1, "Item "+Str(i))
SetGadgetItemData(2,0,-1)
Next i
SetGadgetItemData(2,0,1) ; item 0 and 5
SetGadgetItemData(2,5,1)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
EDIT:
Alle Items selbst gezeichnet:
Code:
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Arial", 8, #PB_Font_Underline)
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*pNMHDR.NMHDR = lParam
gadget = GetWindowLongPtr_(*pNMHDR\hwndFrom,#GWL_ID)
If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(2)
*pTVcd.NMTVCUSTOMDRAW = lParam
Select *pTVcd\nmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE | #TVIF_PARAM
tviText$ = Space(100)
tvi\pszText = @tviText$
tvi\cchTextMax = 100
tvi\hItem = *pTVcd\nmcd\dwItemSpec
SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)
If GetGadgetItemData(gadget,tvi\lParam) = 1
SelectObject_(*pTVcd\nmcd\hdc, hFont)
SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
EndIf
rc.RECT = *pTVcd\nmcd\rc
rc\left = 15
rc\right = 20
rc\top + 5
rc\bottom - 6
Rectangle_(*pTVcd\nmcd\hdc,rc\left,rc\top,rc\right,rc\bottom)
*pTVcd\nmcd\rc\left = 25
DrawText_(*pTVcd\nmcd\hdc,tviText$,Len(tviText$),*pTVcd\nmcd\rc,0)
result = #CDRF_SKIPDEFAULT
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;And CreateGadgetList(WindowID(0))
TreeGadget(2, 10, 10, 160, 160)
SetWindowCallback(@WinCallback())
For i = 0 To 10
AddGadgetItem (2, -1, "Item "+Str(i))
SetGadgetItemData(2,0,-1)
Next i
SetGadgetItemData(2,0,1) ; item 0 and 5
SetGadgetItemData(2,5,1)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
Du musst also auch die Linien vor den Item selbst zeichnen. Im letzten Beispiel kleine Rechtecke.