Есть CEdit в режиме MULTILINE, в него я ввожу текст (из нескольких строчек)
Как сделать так, чтобы в класс — производный от CListbox этот текст вводился также по строчкам? а то он вводится в одну строку с твердыми знаками вместо перевода каретки... а также, как сделать, чтобы строка, которая длиннее чем ширина моего листбокса автоматически переводилась на другую строчку? (у меня она рисуется в одну строчку и в результате не вся строка видна)
Здравствуйте, leonidka, Вы писали:
L>Как сделать так, чтобы в класс — производный от CListbox этот текст вводился также по строчкам? а то он вводится в одну строку с твердыми знаками вместо перевода каретки... а также, как сделать, чтобы строка, которая длиннее чем ширина моего листбокса автоматически переводилась на другую строчку? (у меня она рисуется в одну строчку и в результате не вся строка видна)
Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.
Здравствуйте, IvanM, Вы писали:
IM>Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.
Собственно у меня стоит LBS_OWNERDRAWVARIABLE... проблема нескольких строк решается довольно просто, а вот насчет невлезающей строки — не совсем представляю как это реализовать, можете помочь советом?
Здравствуйте, IvanM, Вы писали:
IM>Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.
И еще для чего тогда нужен стиль LBS_HASSTRINGS? он разве не для таких задач предназначен?
Здравствуйте, leonidka, Вы писали:
L>Здравствуйте, IvanM, Вы писали:
IM>>Если просто, то никак. Если очень хочется, то можно поставить стиль ownerdraw (например LBS_OWNERDRAWFIXED) и рисовать каждый элемент вместе с текстом самостоятельно.
L>Собственно у меня стоит LBS_OWNERDRAWVARIABLE... проблема нескольких строк решается довольно просто, а вот насчет невлезающей строки — не совсем представляю как это реализовать, можете помочь советом?
Посмотри на CDC::GetTextExtent и т.п.
Типа если GetTextExtent(NewString).cx > ListBox.GetWindowRect.Width, то ...
Здравствуйте, leonidka, Вы писали:
L>Собственно у меня стоит LBS_OWNERDRAWVARIABLE... проблема нескольких строк решается довольно просто, а вот насчет невлезающей строки — не совсем представляю как это реализовать, можете помочь советом?
А в чем проблема? В обработчике WM_MEASUREITEM вычисляешь какой размер ячейки тебе нужен для текста и устанавливаешь. Потом в обработчике WM_DRAWITEM рисуешь свою ячейку вместе с текстом. Все строки должны влезть.
L>И еще для чего тогда нужен стиль LBS_HASSTRINGS? он разве не для таких задач предназначен?
Нет, не для таких. Просто можно будет получать текст ячейки по LB_GETTEXTLEN, так что лишним, я думаю, не будет.
Мало ли кому-нить еще понадобится...
Предлженное выше решение проблемы — решение в лоб — это конечно хорошо, но, мне показалось, извращенским немного...
Решил в итоге так: создаю невидимый едит контрол, мультилайн с шириной как у нужного мне листбокса (ну и шрифт естественно в нем такой же должен быть), вставляю свой текст в него, а он вставляется как раз как мне нужно, ну и потом читаю по строчкам