?
Solved

Error on listbox with more lines in each item

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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

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

Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
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.
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Suggested Courses

777 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