Announcement

Collapse
No announcement yet.

multiline text in treeview

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Chris Holbrook
    replied
    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

    Leave a comment:


  • Michael Mattias
    replied
    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.

    Leave a comment:


  • Chris Holbrook
    replied
    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

    Leave a comment:


  • Chris Holbrook
    replied
    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...

    Leave a comment:


  • Chris Holbrook
    replied
    It certainly sounds pretty good, missing from my popup Win32 help! Thanks!

    Leave a comment:


  • Michael Mattias
    replied
    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.

    Leave a comment:


  • Chris Holbrook
    started a topic multiline text in treeview

    multiline text in treeview

    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?
Working...
X