powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / А Header у Listview прозрачным сделать можно?
3 сообщений из 3, страница 1 из 1
А Header у Listview прозрачным сделать можно?
    #38247998
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрать его нельзя.
Всего одна колонка (причем застопоренная от изменения ширины), но header отвечает за направление сортировки, ну плюс как заголовок содержания.
В 7-ке и 8-ке у меня конечно есть на вооружении стиль "прозрачная кнопка" (спертый из штатной кнопки "свернуть все окна"), которую можно "прилепить" к ListView сверху (как вариант). Но все же хотелось бы разобраться именно с header и инвариантно относительно стилей.

Listview прозрачный, Toolbar прозрачный, кнопки - прозрачные, header сволочь - белое пятно на рисунке.
...
Рейтинг: 0 / 0
А Header у Listview прозрачным сделать можно?
    #38248453
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в принципе это то как раз решаемо вариацией моего "стандартного" метода:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
'для событий ListView1
Public Function NewListView1WindowProc _
  (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
...  
  Dim uNMHDR  As NMHDR
  
  
  Select Case Msg
...
   Case WM_NOTIFY:
     MoveMemory uNMHDR, ByVal lParam, Len(uNMHDR)
     Select Case uNMHDR.code
       Case NM_CUSTOMDRAW
         'Debug.Print "NM_CUSTOMDRAW"
         Static lvcd As NMCUSTOMDRAW
         MoveMemory lvcd, ByVal lParam, Len(lvcd)   ' every structs' member is a Long
         Select Case lvcd.dwDrawStage
           ' ====================================================
           Case CDDS_PREPAINT
             ' Tell the listview we want CDDS_ITEMPREPAINT for each item
             NewListView1WindowProc = CDRF_NOTIFYITEMDRAW
             Exit Function
             ' ====================================================
           Case CDDS_ITEMPREPAINT
             DrawListViewHeader lvcd.hdc, lvcd.hdr.hwndFrom
             Exit Function
           Case Else
         End Select
       Case Else
     End Select
...



Public Sub DrawListViewHeader(the_hdc As Long, the_hwnd As Long)
  Dim rc As RECT
  Dim tPt As POINTAPI
  Dim hbmDstOld As Long
  
  SetBkMode the_hdc, TRANSPARENT
  SetTextColor the_hdc, vbWhite
  SetBkColor the_hdc, CLR_NONE
  
  hbmDstOld = SelectObject(the_hdc, hbshBackDigits)
  GetWindowRect the_hwnd, rc
  tPt.x = rc.Left
  tPt.y = rc.Top
  MapWindowPoints 0, Form1.PictureDigits.hwnd, tPt, 2
  rc.Left = tPt.x
  rc.Top = tPt.y
  SetBrushOrgEx the_hdc, -rc.Left, -rc.Top, tPt

  Dim rRB As RECT
  GetClientRect the_hwnd, rRB

  PatBlt the_hdc, 0, 0, (rRB.Right - rRB.Left), (rRB.Bottom - rRB.Top), PATCOPY
  If Form1.ListView1.ColumnHeaders(1).Tag = 1 Then
    DrawIconEx the_hdc, 6, (rRB.Bottom - rRB.Top - 12) / 2, lngIconAscending, 12, 12, 0, 0, DI_NORMAL
  Else
    DrawIconEx the_hdc, 6, (rRB.Bottom - rRB.Top - 12) / 2, lngIconDescending, 12, 12, 0, 0, DI_NORMAL
  End If
  SelectObject the_hdc, hbmDstOld
End Sub



Единственное,
1) иконку сортировки (или чего там надо) надо рисовать на hdc, обычный способ частично красит header в черный.
2) Стиль с header-а надо снимать:
Код: vbnet
1.
DeactivateWindowTheme hwndH


3) Ну и плохо что так и не научился выставлять высоту header.
За счет необходимости снятия стиля маленькая высота получается даже на Вистообразных.
Были б они повыше, было б красивше.
Но в принципе в контексте "всего прозрачного" терпимо, лучше чем "белое пятно".
...
Рейтинг: 0 / 0
А Header у Listview прозрачным сделать можно?
    #38248454
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую screen приложить:
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / А Header у Listview прозрачным сделать можно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]