А Header у Listview прозрачным сделать можно? - VB
Формулировка задачи:
Убрать его нельзя.
Всего одна колонка (причем застопоренная от изменения ширины), но header отвечает за направление сортировки, ну плюс как заголовок содержания.
В 7-ке и 8-ке у меня конечно есть на вооружении стиль "прозрачная кнопка" (спертый из штатной кнопки "свернуть все окна"), которую можно "прилепить" к ListView сверху (как вариант). Но все же хотелось бы разобраться именно с header и инвариантно относительно стилей.
Listview прозрачный, Toolbar прозрачный, кнопки - прозрачные, header сволочь - белое пятно на рисунке.
Всего одна колонка (причем застопоренная от изменения ширины), но header отвечает за направление сортировки, ну плюс как заголовок содержания.
В 7-ке и 8-ке у меня конечно есть на вооружении стиль "прозрачная кнопка" (спертый из штатной кнопки "свернуть все окна"), которую можно "прилепить" к ListView сверху (как вариант). Но все же хотелось бы разобраться именно с header и инвариантно относительно стилей.
Listview прозрачный, Toolbar прозрачный, кнопки - прозрачные, header сволочь - белое пятно на рисунке.
Решение задачи: «А Header у Listview прозрачным сделать можно?»
textual
Листинг программы
'для событий 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д