To debug it (first time I thought of this) I used setbkcolor @pnm.nmcd.hdc, %CYAN so as to see where the RECT was located. That showed that the RECT was rather narrow. Calling DrawText with %DT_CALCRECT added in recalculated the RECT and the job is, in essence, done. I also focussed on the "correct" TV item by testing the iimage value, which dramatically reduced the confusion.
Now all I have to fix is some cosmetics and this appalling sense of smugness..
Code:
CASE %WM_NOTIFY pnmh = CBLPARAM SELECT CASE @pnmh.code IF LOWRD(CBWPARAM) <> %IDC_arc_tv THEN EXIT SELECT lpia=CBLPARAM CASE %NM_CUSTOMDRAW pnm = CBLPARAM SELECT CASE @pnm.nmcd.dwDrawStage CASE %CDDS_PREPAINT FUNCTION=%CDRF_NOTIFYITEMDRAW CASE %CDDS_ITEMPREPAINT lResult=TreeView_GetItemRect(@pnm.nmcd.hdr.hwndFrom,@pnm.nmcd.dwItemSpec,rc,%true) tvi.mask = %TVIF_IMAGE OR %TVIF_HANDLE tvi.hitem = @pnm.nmcd.dwItemSpec Treeview_getItem(@pnm.nmcd.hdr.hwndFrom, BYVAL VARPTR(tvi)) IF tvi.iimage <> %ico_dog THEN FUNCTION=%CDRF_DODEFAULT EXIT SELECT END IF IF ISTRUE(lResult) THEN szbuf = "AAAAAAAAA AAAAAAAAA " + $CRLF + "BBB BBBBBBBB BBBBBBB" + _ "CCCCCC CCCCCC," + $CRLF + "DDD DDDDDDDDD DDDDDD DDDDDD" hfont = SendMessage(CBHNDL, %WM_GETFONT, 0, 0) hfont2 = SelectObject(@pnm.nmcd.hdc, hfont) settextcolor @pnm.nmcd.hdc, %BLACK setbkcolor @pnm.nmcd.hdc, %CYAN lresult = DrawText (@pnm.nmcd.hdc, BYVAL VARPTR(szbuf), LEN(szbuf), BYVAL VARPTR(rc), _ %DT_LEFT OR %DT_WORDBREAK OR %DT_CALCRECT) lresult = DrawText (@pnm.nmcd.hdc, BYVAL VARPTR(szbuf), LEN(szbuf), BYVAL VARPTR(rc), _ %DT_LEFT OR %DT_WORDBREAK) SelectObject @pnm.nmcd.hdc, hfont2 FUNCTION=%CDRF_NOTIFYITEMDRAW ELSE FUNCTION=%CDRF_DODEFAULT END IF END SELECT END SELECT
Leave a comment: