RE: [WIN32Lib] TreeView pblm: erase, addTVItem, & getTVSelectedText cause crash

new topic     » topic index » view thread      » older message » newer message

> -----Original Message-----
> From: Dan Moyer [mailto:DANIELMOYER at prodigy.net]
> 
> I'm having a problem in using TreeView, whereby if I erase 
> and repopulate a
> TV, *after* I have selected an item in the TV, my program 
> crashes.  If I
> remove the "erase" function for the items that I have before 
> the repopulate,
> no crash (but dupl stuff in TV).
>

Dan, first thing you should do is check deleteItem() in win32lib.  There was
a (read: my) bug in there with regard to both list and treeviews.
Essentially, some internal bookkeeping wasn't done correctly, and when
windows checked on an item (text is stored by win32lib), it wasn't there,
causing a crash.

Make sure your copy looks like this (for ListView & TreeView):


elsif window_type[ id ] = ListView then
    if pos = -1 then
        msg = LVM_DELETEALLITEMS

        iItem = 1

        while iItem <= length( lvitem_owner ) do
            if lvitem_owner[iItem] = id then
                removeLVItem( iItem )
                if iItem < length(lvitem_owner) then
                    iItem += 1
                end if
            else
                iItem += 1
            end if

        end while

    else

        LV_FINDINFO = struct_LVFINDINFO( LVFI_PARAM, "", pos, 0, 0, 0)

        iItem = sendMessage( id, LVM_FINDITEM, -1, LV_FINDINFO ) + 1

        release_mem(LV_FINDINFO)

        if not iItem then
            return 0
        end if

        msg = sendMessage( id, LVM_DELETEITEM, iItem-1, lParam )
        if msg then
            removeLVItem( pos )
        end if

        return msg

    elsif window_type[ id ] = TreeView then
        msg = TVM_DELETEITEM
        if pos = -1 then
            lParam = TVI_ROOT

            -- changed to only delete items in the treeview specified
            iItem = 1

            while iItem <= length( tvitem_owner ) do
                if tvitem_owner[iItem] = id then
                    removeTVItem( iItem )
                    if iItem < length(tvitem_owner) then
                        iItem += 1
                    end if
                else
                    iItem += 1
                end if

            end while
        else

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu