[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Error on listbox with more lines in each item

Posted on 1998-09-11
4
Medium Priority
?
200 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 300 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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

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

Introduction: Displaying information on the statusbar.   Continuing from the third article about sudoku.   Open the project in visual studio. Status bar – let’s display the timestamp there.  We need to get the timestamp from the document s…
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…
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.
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…
Suggested Courses

649 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