Headers in ListView: проблема с картинками: высота и перерисовка. - VB
Формулировка задачи:
Проблема #1:
Если mscomctl сам вставляет картинки и худо-бедно регулирует высоту, то Comctl этого не делает. Т.е. если на Висте все и так хорошо, на XP-стиле так сказать терпимо, то на классике просто похабно. Высоту явно надо увеличить.
Что-то я уже наискал на тему HD_LAYOUT, но добротных примеров не нашел.
Проблема #2:
Видна из рисунка ниже. Проявляется исключительно на классике при использовании манифеста. При применении горизонтального скроллинга картинка уезжает куда надо, а тень ее (верт. полоса справа и слева) остается на прежнем месте.
Здесь видимо потребуются дополнит. объяснения:
1) Я использую для Listview
LVS_EX_DOUBLEBUFFER жизненно необходим для
в случае Висты и достаточно хорош для остальных стилей /систем, т.к. уменьшает мерцалку при перерисовках, но имеет побочный эффект неперерисовки header-ов в принципе, поэтому это надо делать принудительно:
2)
Собственно глюк, нарисованный на картинках выше обусловлен именно этим пунктом и не зависит от LVS_EX_DOUBLEBUFFER, но я вынужден выполнять этот код именно из-за LVS_EX_DOUBLEBUFFER
Я могу не использовать LVS_EX_DOUBLEBUFFER для классики, но тогда при горизонтальном скроллинге header-ы вообще могут "затираться ластиком", т.е. пункт 2 полезен по-любому
3) В принципе я нашел как исправить и это:
(Я назначаю картинки ПОВТОРНО после принудительной перерисовки, тени исчезают, но не дай бог я буду перерисовывать картинку в первом, т.е. нулевом столбце, тогда ничего не сработает)
Но теперь "ТЕНИ" появляются в момент MOUSE_UP при раздвижении header-ов.
Ладно, бьем и здесь.
Но остается проблема НУЛЕВОГО СТОЛБЦА. При задвигании его влево тень его картинки нас преследует, мои ходы это не решают.
Вообще говоря, резонно задать еще следующий вопрос.
Иногда хочется скажем чтоб на ListView был FocusRectangle (с точечками даже красивее).
Я конечно могу отменить стиль
Но этим я отменяю лишь Vista/XP стиль, но никак не "вредные" деяния манифеста. Типа тема уходит, а тени остаются.
Если mscomctl сам вставляет картинки и худо-бедно регулирует высоту, то Comctl этого не делает. Т.е. если на Висте все и так хорошо, на XP-стиле так сказать терпимо, то на классике просто похабно. Высоту явно надо увеличить.
Что-то я уже наискал на тему HD_LAYOUT, но добротных примеров не нашел.
Как изменить headers.height?
Проблема #2:
Видна из рисунка ниже. Проявляется исключительно на классике при использовании манифеста. При применении горизонтального скроллинга картинка уезжает куда надо, а тень ее (верт. полоса справа и слева) остается на прежнем месте.
Здесь видимо потребуются дополнит. объяснения:
1) Я использую для Listview
LVS_EX_DOUBLEBUFFER жизненно необходим для
в случае Висты и достаточно хорош для остальных стилей /систем, т.к. уменьшает мерцалку при перерисовках, но имеет побочный эффект неперерисовки header-ов в принципе, поэтому это надо делать принудительно:
2)
Собственно глюк, нарисованный на картинках выше обусловлен именно этим пунктом и не зависит от LVS_EX_DOUBLEBUFFER, но я вынужден выполнять этот код именно из-за LVS_EX_DOUBLEBUFFER
Я могу не использовать LVS_EX_DOUBLEBUFFER для классики, но тогда при горизонтальном скроллинге header-ы вообще могут "затираться ластиком", т.е. пункт 2 полезен по-любому
3) В принципе я нашел как исправить и это:
(Я назначаю картинки ПОВТОРНО после принудительной перерисовки, тени исчезают, но не дай бог я буду перерисовывать картинку в первом, т.е. нулевом столбце, тогда ничего не сработает)
Но теперь "ТЕНИ" появляются в момент MOUSE_UP при раздвижении header-ов.
Ладно, бьем и здесь.
Но остается проблема НУЛЕВОГО СТОЛБЦА. При задвигании его влево тень его картинки нас преследует, мои ходы это не решают.
Вообще говоря, резонно задать еще следующий вопрос.
Как отменить действие манифеста применительно к заданному контролу?
Он на классике часто ничего не дает (для header-ов то точно), иногда дает глюки.Иногда хочется скажем чтоб на ListView был FocusRectangle (с точечками даже красивее).
Я конечно могу отменить стиль
Но этим я отменяю лишь Vista/XP стиль, но никак не "вредные" деяния манифеста. Типа тема уходит, а тени остаются.
Решение задачи: «Headers in ListView: проблема с картинками: высота и перерисовка.»
textual
Листинг программы
Public fnt_LV As IFont 'родной шрифт Listview, которым пишем в заголовках headers через CustomDraw Private Sub Form_Load() Set fnt_LV = Form1.ListView1.Font ...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д