ListIconGadget Header
Posted: Mon Aug 08, 2011 4:26 pm
Please, help!
on a blue background is not visible title text
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