Page 1 of 1

ListIconGadget Header

Posted: Mon Aug 08, 2011 4:26 pm
by omboy
Please, help!

on a blue background is not visible title text

Code: Select all

Procedure HDProc(hwnd, uMsg, wparam, lparam) 
   Protected *hdlayout.HD_LAYOUT, *rect.RECT, *windowpos.WINDOWPOS, ps.PAINTSTRUCT, rc.RECT 
   oldproc = GetProp_(hwnd, "oldproc") 
   Select uMsg 
       
    Case #WM_ERASEBKGND 
     result = 1  
         
    Case #WM_PAINT, #WM_PRINTCLIENT 
      ;result = CallWindowProc_(oldProc, hwnd, uMsg, wparam, lparam) 
      If wParam ;This is for #WM_PRINTCLIENT. 
        hdc = wParam 
          GetClientRect_(hWnd, rc) 
        Else 
          hdc = BeginPaint_(hWnd, ps) 
          CopyMemory(@ps\rcPaint, @rc, SizeOf(RECT)) 
        EndIf 
        If hdc 
           
          hBrush = CreateSolidBrush_(#Blue) 
          FillRect_(hdc, rc, hBrush)          
          DeleteObject_(hBrush) 
             
          If wParam = 0 
            EndPaint_(hWnd, ps) 
          EndIf 
        EndIf 
         

         
      Case #WM_NCDESTROY 
       RemoveProp_(hwnd, "oldproc") 
     Case #HDM_LAYOUT                                  
       result = CallWindowProc_(oldProc, hwnd, uMsg, wparam, lparam) 
       *hdlayout = lParam 
       If *hdlayout\prc <> 0 
         *rect = *hdlayout\prc 
         *rect\top = 40 
       EndIf 
       If *hdlayout\pwpos <> 0 
         *windowpos = *hdlayout\pwpos 
         *windowpos\cy = 40 
       EndIf 
     Default 
       result = CallWindowProc_(oldproc, hwnd, uMsg, wparam, lparam) 
   EndSelect 
   ProcedureReturn result 
 EndProcedure 

 Procedure LVProc(hwnd, msg, wparam, lparam) 
   Protected result, *nmh.NMHDR, *pnmcd.NMCUSTOMDRAW, text$, rc.RECT 
   oldproc = GetProp_(hwnd, "oldproc") 
   Select msg 
       
     Case #WM_NCDESTROY 
       RemoveProp_(hwnd, "oldproc") 
       result = CallWindowProc_(oldproc, hwnd, msg, wparam, lparam) 
     Case #WM_NOTIFY 
       *nmh = lParam 
       Select *nmh\code 
         Case #NM_CUSTOMDRAW 
           *pnmcd = lParam 
           Select *pnmcd\dwDrawStage 
             Case #CDDS_PREPAINT 
               result = #CDRF_NOTIFYITEMDRAW 
             Case #CDDS_ITEMPREPAINT 
               text$=GetGadgetItemText(*pnmcd\hdr\idFrom,-1,*pnmcd\dwItemSpec) 
               If *pnmcd\uItemState & #CDIS_SELECTED 
                 DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED) 
                 *pnmcd\rc\top-2 
                 *pnmcd\rc\left+1 
               Else 
                 DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH) 
               EndIf 
               InflateRect_(*pnmcd\rc, -6, 0) 
               CopyMemory(*pnmcd\rc, rc, SizeOf(RECT)) 
               DrawText_(*pnmcd\hdc, @text$, Len(text$), rc, #DT_WORDBREAK|#DT_END_ELLIPSIS|#DT_CALCRECT|#DT_NOPREFIX|#DT_END_ELLIPSIS|#DT_CENTER) 
               *pnmcd\rc\top = (*pnmcd\rc\bottom - rc\bottom)>>1 
               *pnmcd\rc\bottom = *pnmcd\rc\top + rc\bottom 
               DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_WORDBREAK|#DT_END_ELLIPSIS|#DT_NOPREFIX|#DT_END_ELLIPSIS|#DT_CENTER) 
               result = #CDRF_SKIPDEFAULT 
           EndSelect 
         Default 
           result = CallWindowProc_(oldproc, hwnd, msg, wparam, lparam) 
       EndSelect 
     Default 
       result = CallWindowProc_(oldproc, hwnd, msg, wparam, lparam) 
   EndSelect 
   
   ProcedureReturn result 
 EndProcedure 

 OpenWindow(0,0,0,500,400,"Multiline Listview Header",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
 ListIconGadget(0,0,0,500,400,"George" + #LF$+ "Bush",100,#PB_ListIcon_GridLines) 
 SetProp_(GadgetID(0),"oldproc",SetWindowLongPtr_(GadgetID(0),#GWL_WNDPROC,@LVProc())) 
 AddGadgetColumn(0,1,"Bill" + #LF$ + "Clinton",98) 
 AddGadgetColumn(0,2,"Albert" + #LF$ +"Gore",98) 
 AddGadgetItem(0, -1, "Huh? What?"+Chr(10)+"I didn't have sex!"+Chr(10)+"The sky is falling!") 

 header = SendMessage_(GadgetID(0),#LVM_GETHEADER,0,0) 
 SetProp_(header,"oldproc",SetWindowLongPtr_(header,#GWL_WNDPROC,@HDProc())) 

 Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow