Click here to Skip to main content
Click here to Skip to main content

Editable Multi-line ListBox

By , 25 Mar 2003
 

Screenshot of ListBoxXP

Introduction

If you take a look at the snapshot and run the .exe file you`ll realise that there`s nothing I need to say here. I needed this control with item editing, insertion, deletion, and moving capabilities and I asked, "why not share it with people?"

Using the Code

It`s very easy to use just add a variable based on the class and that`s all. You work with it like a normal listbox.

//
// powered by NetControl.ro
//
// .............
void CListBoxXP::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    CString szBuf="";
    COLORREF col;
    if(((int)lpDrawItemStruct->itemID==edited)&&(IsWindow(hHelper)))
        return;
    {
        GetText(lpDrawItemStruct->itemID,szBuf);
         SetTextColor(lpDrawItemStruct->hDC,RGB(0,0,0));
         RECT r;
         memcpy((void*)&r,&lpDrawItemStruct->rcItem,sizeof(RECT));
         if(itm==(int)lpDrawItemStruct->itemID)
         {
            HBRUSH br;
            br=::CreateSolidBrush(LightenColor(<BR>                GetSysColor(COLOR_HIGHLIGHT),0.9));
            ::FillRect(lpDrawItemStruct->hDC,<BR>                &lpDrawItemStruct-&gt;rcItem,br);
            ::DeleteObject(br);
         }
         else
         {
             FillRect(lpDrawItemStruct-&gt;hDC,<BR>                &lpDrawItemStruct->rcItem,<BR>                (HBRUSH)GetStockObject(WHITE_BRUSH));
         }<BR>
         r.left+=5;
         r.top+=2;
         col=RGB(255,255,255);
         if(lpDrawItemStruct->itemState & ODS_SELECTED)
         {
            col=RGB(220,220,220);
            HBRUSH br;
            br=::CreateSolidBrush(LightenColor(<BR>                GetSysColor(COLOR_HIGHLIGHT),0.75));
            ::FillRect(lpDrawItemStruct->hDC,<BR>                &lpDrawItemStruct->rcItem,br);
            ::DeleteObject(br);
         }
         if(lpDrawItemStruct-&gt;itemState & ODS_FOCUS)
         {
            HBRUSH br;
            br = ::CreateSolidBrush(LightenColor(<BR>                GetSysColor(COLOR_HIGHLIGHT),0.5));
            ::FrameRect(lpDrawItemStruct->hDC,<BR>                &lpDrawItemStruct->rcItem,br);
            ::DeleteObject(br);
         }
         SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);<BR>
         r.left-=3;
         r.top-=2;
         if(CountLines(szBuf) > 1)
             DrawText(lpDrawItemStruct->hDC,szBuf,<BR>                strlen(szBuf),&r,<BR>                DT_LEFT|DT_TOP|DT_WORDBREAK);
         else
             DrawText(lpDrawItemStruct->hDC,szBuf,<BR>                strlen(szBuf),&r,<BR>                DT_LEFT|DT_VCENTER|DT_SINGLELINE);
    }
}

void CListBoxXP::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
    HDC hDC;
    TEXTMETRIC tm;
    char szBuf[512]="";
    ::SendMessage(this->m_hWnd, LB_GETTEXT,<BR>        (WPARAM)lpMeasureItemStruct->itemID,(LPARAM)szBuf);<BR>
    hDC = ::GetDC(this->m_hWnd);
    CRect r;
    GetClientRect(r);
    ::GetTextMetrics(hDC, &tm);
    lpMeasureItemStruct->itemHeight=(tm.tmHeight)*CountLines(szBuf);
    ::ReleaseDC(this->m_hWnd, hDC);
}
// ...<BR>

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

TomKat
Web Developer
Romania Romania
Member
I have been programming for the past 6 years in VBasic, Delphi, C, C++ .
I also have extended knowledge of webdesign (HTML, CSS, JavaScript, VBScript), webprogramming (PHP, ASP, ASP.NET (C#)) and database integration (mySql, MSSQL Server).
And when I`m not programming I`m working out or working on some personal projects .
Last but not least I`m looking for a project-based job in programming or webdesign .

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralGet The edited text in User classmemberArtiGujare26 Jan '06 - 2:25 
GeneralIssues with the control with Japanese Windowsmembercdesylva27 Sep '04 - 15:57 
GeneralRe: Issues with the control with Japanese Windowsmembercdesylva27 Sep '04 - 15:58 
Generalneed help pleasesussHeex8 Jul '04 - 10:43 
GeneralRe: need help pleasememberTomKat8 Jul '04 - 23:07 
GeneralBug on first additionmemberKarthik Murugan21 Mar '04 - 17:15 
Generalbug!membertang_ghost12 Mar '04 - 21:44 
Generalcan't found CNetControl.dspmembertang_ghost12 Mar '04 - 21:13 
GeneralRe: can't found CNetControl.dspmemberMonirTigerit19 Jul '05 - 20:48 
Generaldebug assertionsmemberto_be_unknown4 Jun '03 - 0:41 
QuestionSave and Load data?memberchen27 Mar '03 - 19:42 
AnswerRe: Save and Load data?memberTomKat28 Mar '03 - 10:17 
GeneralNice!memberErnest Laurentin26 Mar '03 - 16:52 
GeneralCool!memberWayzer26 Mar '03 - 7:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 26 Mar 2003
Article Copyright 2003 by TomKat
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid