I've got as far as using %NM_CUSTOMDRAW under %WM_NOTIFY which gives me the control id and the NMLVCUSTOMDRAW stucture gives me - somehow - the treeview item. To get greater height for the item to display several lines of text, my guess is that a larger icon has to be specified? Am I on the right lines?
Announcement
Collapse
No announcement yet.
multiline text in treeview
Collapse
X
-
What happened when you tried? Did the vertical size of the supplied RECT change?
Well, Ok. But I think the TVM_SETITEMHEIGHT message sure looks promising.Michael Mattias
Tal Systems (retired)
Port Washington WI USA
[email protected]
http://www.talsystems.com
-
This is it, to set the height fo individual items, use the TVITEMEX structure:
iIntegral
Height of the item, in multiples of the standard item height (see TVM_SETITEMHEIGHT). For example, setting this member to 2 will give the item twice the standard height...
Comment
-
So far, the treeviw item height adjustment is working fine as per the notes above. But nothing is displayed in the treeview control!
Code:CASE %WM_NOTIFY pnmh = CBLPARAM SELECT CASE @pnmh.code IF LOWRD(CBWPARAM) <> %IDC_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) '*************** right stuff is in RECT structure! DIALOG SET TEXT CBHNDL, STR$(rc.nleft)+ "," + STR$(rc.ntop) + "," + STR$(rc.nright) + "," + STR$(rc.nbottom) IF ISTRUE(lResult) THEN szbuf = "AAAAAAAAAAAAAAAAAA" + $CRLF + "BBBBBBBBBBBBBBBBBB" + _ "CCCCCCCCCCCC," + $CRLF + "DDDDDDDDDDDDDDDDDDDDDDDD" hfont = SendMessage(CBHNDL, %WM_GETFONT, 0, 0) hfont2 = SelectObject(@pnm.nmcd.hdc, hfont) ' ***********reply from Drawtext looks correct lresult = DrawText (@pnm.nmcd.hdc, szbuf, LEN(szbuf), rc, %DT_LEFT OR %DT_WORDBREAK) '%DT_CALCRECT OR %DT_LEFT OR %DT_WORDBREAK) SelectObject @pnm.nmcd.hdc, hfont2 FUNCTION=%CDRF_NOTIFYITEMDRAW ELSE FUNCTION=%CDRF_DODEFAULT END IF END SELECT
Comment
-
After you draw the item, you need to return CDRF_SKIPDEFAULT, not CDRF_NOTIFYITEMDRAW.
Also, if this is not DDT, you are not returning the value correctly. You need either to EXIT FUNCTION after setting the return value (or the mesage will be processed by DefWindowProc) if in a 'regular' window procedure; or SetWindowLong hWnd, %DWL_MSGRESULT, %TRUE and EXIT FUNCTION if this is a dialog proc for a SDK-style dialog.
But I 'assume' it's DDT because of the presence of a DIALOG SET TEXT statement.Michael Mattias
Tal Systems (retired)
Port Washington WI USA
[email protected]
http://www.talsystems.com
Comment
-
MCM, thanks, the retval is not the problem though.
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
Comment
Comment