![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Имеется List View (icon view) - выбранный элемент в нем рисуется под синей полупрозрачной маской, имя файла показывается полностью. Если имя длинное то занимает две строчки.
Мне нужно чтобы имя всегда было на ОДНОЙ строке , как в невыбранных элементах, а изображение закрашено СПЛОШНЫМ синим фоном, но только по краям. Можно ли это дело как-то поправить? Куда надо копать чтобы перехватить прорисовку Selected Item? -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
WM_DRAWITEM, но в любом случае, чтобы имя не занимало несколько строк нужно использовать стили LVS_OWNERDATA, или LVS_OWNERDRAWFIXED, чтобы сздать виртуальный лист-вью.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Спасибо за совет
Между прочим в описании WM_DRAWITEM нашел такое: "Before returning from processing this message, an application should ensure that the device context identified by the hDC member of the DRAWITEMSTRUCT structure is in the default state. " Значит ли это что нужно вызывать SaveDC/RestoreDC или как иначе быть уверенным что device context ... in the default state? -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Если хорошенько подумать, то тут упор делается на сам контекст, а не на его состояние, т.е. для него не должны вывзываться ни DeleteDC, ни ReleaseDC. SaveDC/RestoreDC можно, но не обязательно, если изменения не касаются объектов выбранных в контекст. Проще и быстрее будет использовать возвращаемые значения GDI функций, например так:
Так, мы восстанавливаем только то, что изменяем, а не весь девайс. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
LVS_OWNERDRAWFIXED только для Report view
Делаю так (в ответ на LVN_GETDISPINFO) if (pLvdi->item.mask & LVIF_IMAGE) { hBrushBk=GetSysColorBrush(COLOR_ACTIVEBORDER); if (LVIS_SELECTED == ListView_GetItemState (hwndList, pLvdi->item.iItem, LVIS_SELECTED)) hBrushBk=GetSysColorBrush(COLOR_HIGHLIGHT); ...... рисуем битмап ...... ImageList_Add(hTmbImgList, hBmp, NULL); pLvdi->item.iImage= 0; // единственный } Все равно рисуется сверху синяя маска и длинные имена файлов на двух строчках -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
либо в LVN_GETDISPINFO обрезай строки, либо пробуй перехватывать LVM_SETWORKAREAS и корректируй высоту итемов.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
стиль LVS_NOLABELWRAP помог, но похоже обрезать имена файлов придется самому. Мне нужно чтобы ширина лейбла равнялась ширине иконки. Чтоб избавиться от оверлея пришлось субклассировать и писать свой обработчик для WM_LBUTTONDOWN. Иначе ставится LVIS_FOCUSED и рисуется оверлей с рамкой Очень хочу почитать код нативного обработчика, скажем WM_LBUTTONDOWN для лист вью Это сообщение отредактировал(а) Aleksandor - 18.10.2006, 07:13 -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |