ListIcon with Real Transparency[Windows]

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

ListIcon with Real Transparency[Windows]

Post by RASHAD »

Another workaround
You may want to play movie in the back
You can apply it without any problem with Windows 8.1,10,11

Code: Select all

#LVM_GETHEADER = #LVM_FIRST + 31 

; Globals 
Global oldListIconCallback, hHeader, brush 
brush=CreateSolidBrush_(#Yellow)


Procedure SubclassedListIcon(hWnd, uMsg, wParam, lParam) 
  Protected hdi.hd_item
  result = CallWindowProc_(oldListIconCallback, hWnd, uMsg, wParam, lParam) 
  Select uMsg
    Case #WM_NOTIFY 
      *pnmh.NMHDR = lparam 
      ;--> Get handle to ListIcon header control 
        If *pnmh\code = #NM_CUSTOMDRAW
        *pnmcd.NMCUSTOMDRAW = lparam 
        ;--> Determine drawing stage 
        Select *pnmcd\dwDrawStage 
          Case #CDDS_PREPAINT 
            result = #CDRF_NOTIFYITEMDRAW 
          Case #CDDS_ITEMPREPAINT 
            text$=GetGadgetItemText(0, -1, *pnmcd\dwItemSpec)
            If *pnmcd\uItemState & #CDIS_SELECTED
              DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED)
              *pnmcd\rc\left+2 : *pnmcd\rc\top+1
            Else
              DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH)
            EndIf
            *pnmcd\rc\bottom-1 : *pnmcd\rc\right-1
            SetBkMode_(*pnmcd\hdc,#TRANSPARENT) 
            If *pnmcd\dwItemSpec&1
              FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
              SetTextColor_(*pnmcd\hdc, #Black) 
            Else
              FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
              SetTextColor_(*pnmcd\hdc, #Red) 
            EndIf
            If *pnmcd\rc\right>*pnmcd\rc\left
              DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_CENTER|#DT_VCENTER|#DT_SINGLELINE|#DT_END_ELLIPSIS)
            EndIf
            result = #CDRF_SKIPDEFAULT
        EndSelect 
      EndIf 
  EndSelect 
  ProcedureReturn result 
EndProcedure

Procedure liCB()
  InvalidateRect_(GadgetID(0),0,1)
EndProcedure

Procedure sizeCB()
  ResizeWindow(1,WindowX(0)+175,WindowY(0)+150,#PB_Ignore,#PB_Ignore)
EndProcedure

UsePNGImageDecoder()
LoadImage(0, GetTemporaryDirectory()+"890FX-Deluxe4(m).png", 0)
ResizeImage(0,1024,768)

OpenWindow(0, 0, 0,1024,768, "Window_0",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(10,0,0,1024,768,ImageID(0))
DisableGadget(10,1)


OpenWindow(1, 0, 0,700, 500, "Window_0",#PB_Window_BorderLess|#PB_Window_ScreenCentered,WindowID(0))

  SetWindowLong_(WindowID(1),#GWL_EXSTYLE,#WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WindowID(1),#Blue,0,#LWA_COLORKEY)
  UseGadgetList(WindowID(1))  
  ListIconGadget(0, 0, 0, 700, 500, "No.", 30, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection) 
  SetGadgetColor(0,#PB_Gadget_BackColor,#Blue)
  SetGadgetColor(0,#PB_Gadget_FrontColor,$FFFFFF)
  SetGadgetColor(0,#PB_Gadget_LineColor,$FFFFFF)
  
  ;hHeader = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)   

  AddGadgetColumn(0, 1, "Player names", 150) 
  AddGadgetColumn(0, 2, "Pos", 50)
  AddGadgetColumn(0, 3, "KP", 35)
  AddGadgetColumn(0, 4, "TA", 35)
  AddGadgetColumn(0, 5, "PS", 35)
  AddGadgetColumn(0, 6, "SH", 35)
  AddGadgetColumn(0, 7, "PC", 35)
  AddGadgetColumn(0, 8, "HE", 35)
  AddGadgetColumn(0, 9, "ST", 35)
  AddGadgetColumn(0, 10, "SP", 35)
  AddGadgetColumn(0, 11, "BC", 35)
  AddGadgetColumn(0, 12, "FT", 35)
  AddGadgetColumn(0, 13, "PF", 35)
  ;Next  
;Add some data
  For b=0 To 99; Add 100 rows.
    AddGadgetItem(0,-1,"")
  Next
  For i = 0 To 99
    For j = 0 To 50
      SetGadgetItemText(0,i,Str(i+j),j)
    Next j
  Next i
  oldListIconCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @SubclassedListIcon()) 
  BindEvent(#PB_Event_MoveWindow,@sizeCB())

  Repeat
    WaitWindowEvent(1) 
  Until GetAsyncKeyState_(#VK_ESCAPE) & $8000 = $8000 Or WaitWindowEvent(1) = #PB_Event_CloseWindow
  DeleteObject_(brush)
  
  End
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: ListIcon with Real Transparency[Windows]

Post by Kwai chang caine »

Hello MASTER :D
Works nice here, thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
Post Reply