Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
Я уверен, что это вопрос не в тему Beginners. 22.05.02 14:52 Число просмотров: 930 Штраф: 10 [+]
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
|
<programming>
|
[Win32] ListBox 21.05.02 17:28 [+, KMiNT21]
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
Вопрос собственно по subj.
Как мне сделать, чтобы при добавлении в него новой строки (SendMessage(hWndLog,LB_ADDSTRING,0,(LONG)Buf)) строка добавлялась другого цвета?
|
|
Это тебе не richtext там так нельзя 22.05.02 02:37
Автор: Korsh <Мельников Михаил> Статус: Elderman
|
|
| |
Можно... 22.05.02 14:51
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
но только надо создать свое событие OwnerDraw в котором будер это рисоваться. Вот только я не знаю как создать и правильно сделать. Поэтому и спрашиваю.
|
| | |
Можно... 22.05.02 15:01
Автор: ggg <ggg> Статус: Elderman
|
вот почитай:
WM_DRAWITEM
WM_MEASUREITEM
GetStockObject(DEFAULT_GUI_FONT)
DrawText()
GetSysColor(COLOR_WINDOW)
и т.п.
а цвет строки сам задаёшь
например через LB_SETITEMDATA
а потом в WM_DRAWITEM оттуда берёшь
|
| | | |
Можно... 22.05.02 16:21
Автор: Wizard(2) Статус: Незарегистрированный пользователь Отредактировано 22.05.02 17:01 Количество правок: 1
|
> вот почитай: > WM_DRAWITEM > WM_MEASUREITEM > GetStockObject(DEFAULT_GUI_FONT) > DrawText() > GetSysColor(COLOR_WINDOW) > и т.п. > > а цвет строки сам задаёшь > например через LB_SETITEMDATA > а потом в WM_DRAWITEM оттуда берёшь
Спасибо. А можно по-конкретней.
Вот я создаю ListBox со свойством LBS_OWNERDRAWFIXED.
В родит. окне обрабатываю WM_MEASUREITEM (хотя не обязательно):
case WM_MEASUREITEM:
lpmis = (LPMEASUREITEMSTRUCT) lParam;
lpmis->itemHeight = 16;
Потом надо создать WM_DRAWITEM:
case WM_DRAWITEM:
lpdis = (LPDRAWITEMSTRUCT) lParam;
if(!lpdis->CtlType==ODT_LISTBOX) break;
MyColor=(COLORREF)SendMessage(lpdis->hwndItem,LB_GETITEMDATA, lpdis->itemID, (LPARAM) 0);
SendMessage(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, (LPARAM) Buf);
SetTextColor(lpdis->hDC,MyColor);
RetCode=DrawText(lpdis->hDC,Buf,lstrlen(Buf),&lpdis->rcItem,DT_LEFT);
break;
Добавляю текст так
MyColor=RGB(255, 0, 0);
Num=SendMessage(hWndLog,LB_ADDSTRING,0,(LONG)Buf);
SendMessage(hWndLog, LB_SETITEMDATA, Num, MyColor);
Разный цвет работает, а текст по LB_GETTEXT не извлекается. Точнее извлекается до 4-х символов (напр. 'я' и три нуля). Почему?
|
| | | | |
Все получилось :). Вопрос снимается 22.05.02 19:04
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
|
|
A beginners board dlia chego? 21.05.02 21:41
Автор: + <Mikhail> Статус: Elderman
|
|
| |
Я уверен, что это вопрос не в тему Beginners. 22.05.02 14:52 Штраф: 10 [+]
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
|
|
|