Here are the modified functions
It looks the indents have got messed up a bit! : Edit fixed code indents
If you use this I can post the sorting code I have worked on.
Thanks
void Win32ListBox::clear(){ int count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 ); for (int i=0;i<count;i++){ remove(0); } } void Win32ListBox::insert( int index,BBString *item,BBString *tip,int icon ){ LVITEM it={LVIF_TEXT}; it.iItem=index; it.pszText=cstr(item); if( iconStrip() && icon>=0 ){ it.mask|=LVIF_IMAGE; it.iImage=icon; } SendMessage( _gadget.hwnd(),LVM_INSERTITEM,0,(LPARAM)&it ); SendMessage(_gadget.hwnd(),LVM_SETCOLUMNWIDTH,0,-1); TOOLINFO ti={sizeof(ti)}; ti.hwnd=_gadget.hwnd(); ti.uFlags=TTF_SUBCLASS; int i,count,ExistingTip,PriorExistingTip; char buffer[8192]; count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 )-1; // Move tips if (index < count) { for (i=count;i>index;i--) { ti.lpszText=buffer; PriorExistingTip = 0; ti.uId=i; ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ); if (i>0) { ti.uId=i-1; PriorExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ); } ti.uId=i; if ((PriorExistingTip==0) && (ExistingTip==1)) { SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti ); } else if (PriorExistingTip==1) { if (ExistingTip==0) { ti.uFlags=TTF_SUBCLASS; SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti ); } else { SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti ); } } } } ti.uId=index; ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ); if (tip->length ) { ti.lpszText=cstr(tip); ti.rect.left=LVIR_SELECTBOUNDS; SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,ti.uId,(LPARAM)&ti.rect ); if ((ti.uId > count) || (ExistingTip==0)) { SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti ); } else { SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti ); } } else if (ExistingTip==1){ SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti ); } } void Win32ListBox::modify( int index,BBString *item,BBString *tip,int icon ){ int count ,ExistingTip; char buffer[8192]; LVITEM it={LVIF_TEXT}; it.iItem=index; it.pszText=cstr(item); if( iconStrip() && icon>=0 ){ it.mask|=LVIF_IMAGE; it.iImage=icon; } SendMessage( _gadget.hwnd(),LVM_SETITEM,0,(LPARAM)&it ); SendMessage(_gadget.hwnd(),LVM_SETCOLUMNWIDTH,0,-1); TOOLINFO ti={sizeof(ti)}; ti.uFlags=TTF_SUBCLASS; ti.hwnd=_gadget.hwnd(); ti.uId=index; if (tip->length) { ti.lpszText=buffer; ti.rect.left=LVIR_SELECTBOUNDS; ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ); if (ExistingTip==1) { SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,index,(LPARAM)&ti.rect ); ti.lpszText=cstr(tip); ti.uFlags=TTF_SUBCLASS; SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti ); } else { ti.lpszText=cstr(tip); SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,index,(LPARAM)&ti.rect ); SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti ); } } else if(ExistingTip==1) { SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti ); } } void Win32ListBox::remove( int index ){ int i,count,ExistingTip ,NextExistingTip ;//(ZIL) char buffer[8192]; count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 ); TOOLINFO ti={sizeof(ti)}; ti.hwnd=_gadget.hwnd(); if (index < count-1) { // Move tips for (i=index;i<count;i++) { ti.lpszText=buffer; ti.uId=i; ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ); ti.uId=i+1; NextExistingTip= SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ); ti.uId=i; if (NextExistingTip==1) { if (ExistingTip==1) { SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti ); } else { SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti ); } } else if (ExistingTip==1) { SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti ); } } } ti.uId=count-1; SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti ); SendMessage( _gadget.hwnd(),LVM_DELETEITEM,(WPARAM)index,0 ); SendMessage(_gadget.hwnd(),LVM_SETCOLUMNWIDTH,0,-1); } void Win32ListBox::adjustTips(){ int i,count; char buffer[8192]; count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 ); for (i=0;i<count;i++) { TOOLINFO ti={sizeof(ti)}; ti.uFlags=TTF_SUBCLASS; ti.hwnd=_gadget.hwnd(); ti.uId=i; ti.lpszText=buffer; if (SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti )) { ti.rect.left=LVIR_SELECTBOUNDS; SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,i,(LPARAM)&ti.rect ); SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti ); } } }
It looks the indents have got messed up a bit! : Edit fixed code indents
If you use this I can post the sorting code I have worked on.
Thanks