Solved

Error on listbox with more lines in each item

Posted on 1998-09-11
4
197 Views
Last Modified: 2013-11-20
Hi.
I picked the answer of ListBox with more lines in each item. I tried it and it worked when I use addString with a text directly, but when I put text in a varible like CString or others, I only see unknown or no characters in the items. I am sending some code...

In the CtrlTest example of VC++ 1.52 (custlist.cpp)I did the following:
1). for the class CColorListBox, I wrote a function
void AddTextItem (LPCSTR text)
{           AddString(text);
}
2). I change the item height to 80
#define TEXT_ITEM_HEIGHT  80
void CColorListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{      // all items are of fixed size
      // must use LBS_OWNERDRAWVARIABLE for this to work
      lpMIS->itemHeight = TEXT_ITEM_HEIGHT;
}
3).I change the first "if" statement of this function using a Drawtext()
void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
COLORREF cr = (COLORREF)pDC->GetBkColor();
LPCSTR szText=(LPCSTR)lpDIS->itemData;

if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
   pDC->DrawText(szText,-1,&lpDIS->rcItem,DT_LEFT |
        DT_EXTERNALLEADING | DT_NOCLIP | DT_NOPREFIX |
        DT_WORDBREAK);
}
....
.the same code.
....
}

4).On the Dialog part(OnInitDialog) I insert my strings

//this works

AddTextItem("Name:jespadas\nJob:Engineer\nAge:28")

//this does´t work
char mistr[300]="Name:jespadas\nJob:Engineer\nAge:28"
m_colors.AddTextItem(mistr);

Acording to this code what it is going on?
Why I am loosing the string value?

Thanks, I will appreciate any help.
0
Comment
Question by:jespadas
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 1

Expert Comment

by:Dex_Man
ID: 1322087
Two things I'm thinkin.

1) For List Boxes in VC 5.0, I send the box a message, like this:

SendDlgItemMessage(IDC_HOSTNAME, CB_ADDSTRING, (WPARAM)0, (LPARAM)host);      

Where IDC_HOSTNAME is the name of the ListBox,
CB_ADDSTRING tells it to add a string,
host is the parameter (char, not CString, but CString might work, not sure), but this does add a dtring to the next line in the box. Do a search for "CB_" to find all the things you can send to a box though SendDlg...

2) The other thing, if your \n's. I had trouble with this come to think of it, in an edit box. Try \r\n or \n\r instead of just \n. Worth a try.

You could also do some error checking (assuming you haven't already), output the value of mistr to the screen in a AfxMessageBox (or the debugger could help, I'm not familiar with it...) and make sure it has in it the value you think it does.

Hope something here helps.

-Dex Man
0
 

Author Comment

by:jespadas
ID: 1322088
What I have is a OwnerDraw ListBox that I did with different behaivor. this is a copy of the question I picked from "jeeg" user.

Hi experts!
I would like to do a ListBox with several lines in each item, like this:
--------------------------
id:nnnn                  |
name: xxxxxxxxxxx        >  item 1
hobie: yyyyyyyyy         |    
--------------------------
id:nnnn                  |
name: xxxxxxxxxxx        >  item 2
hobie: yyyyyyyyy         |    
--------------------------

I tried using an AddString with "\n" and "\r" between strings, but it does not work. I have reviewed some multicolumn samples
but I need a diferent kind of viewing my data.

In addtion I new in MFC and need to do it on VC++ 1.52.

Somebody answer to him that the CtrlTest sample on VC 1.5x had something like that, but he needed use DrawText rather then paint a color...




0
 
LVL 2

Accepted Solution

by:
prasanth earned 100 total points
ID: 1322089
//this does´t work
char mistr[300]="Name:jespadas\nJob:Engineer\nAge:28"
m_colors.AddTextItem(mistr);


because mistr only exists in this function's scope. when DrawItem gets called mistr has already been destroyed.. it is on the stack. you need to use new or malloc.

this will work...

char* mistr=new char[300];
strcpy(mistr, "Name:jespadas\nJob:Engineer\nAge:28" );
m_colors.AddTextItem(mistr);

0
 

Author Comment

by:jespadas
ID: 1322090
I am sorry if I did not accept before.
I just was evaluating and doing some code.

very good answer!
Thank you,
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
NetCrunch network monitor is a highly extensive platform for network monitoring and alert generation. In this video you'll see a live demo of NetCrunch with most notable features explained in a walk-through manner. You'll also get to know the philos…

690 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question