Headers in ListView: проблема с картинками: высота и перерисовка. - VB

Узнай цену своей работы

Формулировка задачи:

Проблема #1:
Если 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
...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5