CListBox - проблема со строками
От: leonidka  
Дата: 25.11.06 14:26
Оценка:
Есть CEdit в режиме MULTILINE, в него я ввожу текст (из нескольких строчек)
Как сделать так, чтобы в класс — производный от CListbox этот текст вводился также по строчкам? а то он вводится в одну строку с твердыми знаками вместо перевода каретки... а также, как сделать, чтобы строка, которая длиннее чем ширина моего листбокса автоматически переводилась на другую строчку? (у меня она рисуется в одну строчку и в результате не вся строка видна)
Re: CListBox - проблема со строками
От: IvanM Россия  
Дата: 25.11.06 17:42
Оценка:
Здравствуйте, leonidka, Вы писали:

L>Как сделать так, чтобы в класс — производный от CListbox этот текст вводился также по строчкам? а то он вводится в одну строку с твердыми знаками вместо перевода каретки... а также, как сделать, чтобы строка, которая длиннее чем ширина моего листбокса автоматически переводилась на другую строчку? (у меня она рисуется в одну строчку и в результате не вся строка видна)


Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.
Re[2]: CListBox - проблема со строками
От: leonidka  
Дата: 25.11.06 18:51
Оценка:
Здравствуйте, IvanM, Вы писали:

IM>Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.


Собственно у меня стоит LBS_OWNERDRAWVARIABLE... проблема нескольких строк решается довольно просто, а вот насчет невлезающей строки — не совсем представляю как это реализовать, можете помочь советом?
Re[2]: CListBox - проблема со строками
От: leonidka  
Дата: 25.11.06 19:13
Оценка:
Здравствуйте, IvanM, Вы писали:

IM>Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.


И еще для чего тогда нужен стиль LBS_HASSTRINGS? он разве не для таких задач предназначен?
Re[3]: CListBox - проблема со строками
От: esquire Россия  
Дата: 25.11.06 20:54
Оценка:
Здравствуйте, leonidka, Вы писали:

L>Здравствуйте, IvanM, Вы писали:


IM>>Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.


L>Собственно у меня стоит LBS_OWNERDRAWVARIABLE... проблема нескольких строк решается довольно просто, а вот насчет невлезающей строки — не совсем представляю как это реализовать, можете помочь советом?


Посмотри на CDC::GetTextExtent и т.п.

Типа если GetTextExtent(NewString).cx > ListBox.GetWindowRect.Width, то ...
Пилите гирю знаний, она золотая! (с) В.М.Лушин
Re[3]: CListBox - проблема со строками
От: IvanM Россия  
Дата: 25.11.06 22:07
Оценка:
Здравствуйте, leonidka, Вы писали:

L>Собственно у меня стоит LBS_OWNERDRAWVARIABLE... проблема нескольких строк решается довольно просто, а вот насчет невлезающей строки — не совсем представляю как это реализовать, можете помочь советом?


А в чем проблема? В обработчике WM_MEASUREITEM вычисляешь какой размер ячейки тебе нужен для текста и устанавливаешь. Потом в обработчике WM_DRAWITEM рисуешь свою ячейку вместе с текстом. Все строки должны влезть.

L>И еще для чего тогда нужен стиль LBS_HASSTRINGS? он разве не для таких задач предназначен?


Нет, не для таких. Просто можно будет получать текст ячейки по LB_GETTEXTLEN, так что лишним, я думаю, не будет.
Re[4]: CListBox - проблема со строками
От: leonidka  
Дата: 25.11.06 23:03
Оценка:
Всем спасибо! Вопрос исчерпан
Re: CListBox - проблема со строками
От: leonidka  
Дата: 01.12.06 05:42
Оценка:
Мало ли кому-нить еще понадобится...
Предлженное выше решение проблемы — решение в лоб — это конечно хорошо, но, мне показалось, извращенским немного...
Решил в итоге так: создаю невидимый едит контрол, мультилайн с шириной как у нужного мне листбокса (ну и шрифт естественно в нем такой же должен быть), вставляю свой текст в него, а он вставляется как раз как мне нужно, ну и потом читаю по строчкам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.