Ich hab' noch mal nen' bischen gegoogelt und von verschiedenen Stellen entsprechende Infos eingeholt um dir was zusammen zu basteln.
Code: Alles auswählen
; Title: TreeView BG Image Demo
; Author: Fluid Byte
; Date: December 17, 2006
Import "msimg32.lib"
TransparentBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,hHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,nWidthSrc,nHeightSrc,crTransparent)
EndImport
Global lpPrevFunc.l
Global bPainting.b
CreateImage(0,10,290)
StartDrawing(ImageOutput(0))
For i=0 To 289
CV = i*140/289
Box(0,i,10,1,RGB(255,255-CV,0))
Next
StopDrawing()
Procedure TreeViewProc(hWnd.l,uMsg.l,wParam.l,lParam.l)
Select uMsg
Case #WM_PAINT
If bPainting = #False
bPainting = #True
GetClientRect_(hWnd,wrc.RECT)
BeginPaint_(hWnd,ps.PAINTSTRUCT)
hDC = GetDC_(hWnd)
hbmTemp = CreateCompatibleBitmap_(hDC,wrc\right,wrc\bottom)
hdcMem = CreateCompatibleDC_(hDC)
hbmOld = SelectObject_(hdcMem,hbmTemp)
SendMessage_(hWnd,#WM_PAINT,hdcMem,0)
hBrushBack = CreatePatternBrush_(ImageID(0))
hBrushOld = SelectObject_(hDC,hBrushBack)
SetRect_(trc.RECT,0,0,wrc\right,wrc\bottom)
FillRect_(hDC,trc,hBrushBack)
SelectObject_(hDC,hBrushOld)
DeleteObject_(hBrushBack)
TransparentBlt(hDC,0,0,wrc\right,wrc\bottom,hdcMem,0,0,wrc\right,wrc\bottom,GetSysColor_(#COLOR_WINDOW))
SelectObject_(hdcMem,hbmOld)
DeleteObject_(hbmTemp)
DeleteDC_(hdcMem)
ReleaseDC_(hWnd,hDC)
EndPaint_(hWnd,ps)
bPainting = #False
ProcedureReturn 0
Else
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
EndIf
Case #WM_ERASEBKGND
ProcedureReturn #True
Case #WM_HSCROLL, #WM_VSCROLL, #WM_MOUSEWHEEL
InvalidateRect_(hWnd,0,0)
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
Case #WM_DESTROY
SetWindowLong_(hWnd,#GWL_WNDPROC,lpPrevFunc)
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
Default
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
EndSelect
EndProcedure
; ----------------------------------------------------------
OpenWindow(0,0,0,400,300,"TreeView BG Image Demo",#WS_OVERLAPPEDWINDOW | #WS_VISIBLE | 1)
CreateGadgetList(WindowID(0))
*hwndTreeView = TreeGadget(0,5,5,390,290)
SetGadgetColor(0,#PB_Gadget_LineColor,$505050)
GetObject_(SendMessage_(*hwndTreeView,#WM_GETFONT,0,0),SizeOf(LOGFONT),lplf.LOGFONT)
lplf\lfQuality = 3
hFntTree = CreateFontIndirect_(lplf)
SendMessage_(*hwndTreeView,#WM_SETFONT,hFntTree,0)
For i=1 To 30
AddGadgetItem(0,-1,"Untitled Item #" + Str(i),0,Random(1))
SetGadgetState(0,i-1)
Next
SetGadgetState(0,0)
lpPrevFunc = SetWindowLong_(*hwndTreeView,#GWL_WNDPROC,@TreeViewProc())
HideWindow(0,0)
; ----------------------------------------------------------
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_SizeWindow
ResizeGadget(0,5,5,WindowWidth(0)-10,WindowHeight(0)-10)
EndIf
Until EventID = 16
DeleteObject_(hFntTree)
Deshalb hat diesen Variante einen Nachteil. Dieser bestehet darin das man keine geglättete Schrift benutzen kann bzw. sollte. Da die Farbe Weiss bzw. die momentane Fenster Hintergrundfarbe als transparente Farbe dient und bei geglätteter Schrift aber einige Pixel in ihren RGB Werten verändert werden bleiben beim 'maskieren' Fragmente übrig.
Wie auch immer, was bessers wirst du im Moment nicht finden. Ich hoffe es hilft fürs erste. Und wenn du ganz 'hardcore' drauf bist kannst du dir ja auch ein eigenes TreeGadget basteln.