End SubНо теперь "ТЕНИ" появляются в момент MOUSE_UP при раздвижении header-ов.Ладно, бьем и здесь.Public Function NewListHeaderWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Call SendMessage(ListView1.hwnd, LVM_SETCOLUMN, 2, lvFormat)
Call SendMessage(ListView1.hwnd, LVM_SETCOLUMN, 1, lvFormat)
'Call SendMessage(ListView1.hwnd, LVM_SETCOLUMN, 0, lvFormat)
.fmt = LVCFMT_IMAGE 'Or LVCFMT_BITMAP_ON_RIGHT '
.mask = LVCF_FMT Or LVCF_IMAGE
Call RedrawWindow(pvHeaderhWnd, ByVal 0&, ByVal 0&, RDW_INVALIDATE Or RDW_FRAME Or RDW_UPDATENOW)
pvHeaderhWnd = SendMessageLong(ListView1.hwnd, LVM_GETHEADER, 0, 0)
' 'перерисовка,ибо сам не удосуживается это сделать
Собственно глюк, нарисованный на картинках выше обусловлен именно этим пунктом и не зависит от LVS_EX_DOUBLEBUFFER, но я вынужден выполнять этот код именно из-за LVS_EX_DOUBLEBUFFERЯ могу не использовать LVS_EX_DOUBLEBUFFER для классики, но тогда при горизонтальном скроллинге header-ы вообще могут "затираться ластиком", т.е. пункт 2 полезен по-любому3) В принципе я нашел как исправить и это:(Я назначаю картинки ПОВТОРНО после принудительной перерисовки, тени исчезают, но не дай бог я буду перерисовывать картинку в первом, т.е. нулевом столбце, тогда ничего не сработает)Public Sub RedrawHeaders()
Call RedrawWindow(pvHeaderhWnd, ByVal 0&, ByVal 0&, RDW_INVALIDATE Or RDW_FRAME Or RDW_UPDATENOW)
pvHeaderhWnd = SendMessageLong(ListView1.hwnd, LVM_GETHEADER, 0, 0)
' 'перерисовка,ибо сам не удосуживается это сделать
'для событий listview
Проблема #1:Если mscomctl сам вставляет картинки и худо-бедно регулирует высоту, то Comctl этого не делает. Т.е. если на Висте все и так хорошо, на XP-стиле так сказать терпимо, то на классике просто похабно. Высоту явно надо увеличить.Что-то я уже наискал на тему HD_LAYOUT, но добротных примеров не нашел.Как изменить headers.height?Проблема #2:Видна из рисунка ниже. Проявляется исключительно на классике при использовании манифеста. При применении горизонтального скроллинга картинка уезжает куда надо, а тень ее (верт. полоса справа и слева) остается на прежнем месте.Здесь видимо потребуются дополнит. объяснения:1) Я использую для ListviewlStyle = lStyle Or LVS_EX_FULLROWSELECT Or LVS_EX_DOUBLEBUFFERLVS_EX_DOUBLEBUFFER жизненно необходим для SetWindowTheme ListView1.hwnd, StrPtr("explorer"), 0в случае Висты и достаточно хорош для остальных стилей /систем, т.к. уменьшает мерцалку при перерисовках, но имеет побочный эффект неперерисовки header-ов в принципе, поэтому это надо делать принудительно:2) Public Function NewListWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Headers in ListView: проблема с картинками: высота и перерисовка.
Ответов: 3 Последнее сообщение: 9 май 10, 01:37
Headers in ListView: проблема с картинками: высота и перерисовка.
Добро пожаловать в форум, GuestPP>>PP
Headers in ListView: проблема с картинками: высота и перерисовка. / Visual Basic / Sql.ru
Комментариев нет:
Отправить комментарий