powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Допустим изменил высоту header в Listvie, а как перерисовать рабочую область Listview?
2 сообщений из 2, страница 1 из 1
Допустим изменил высоту header в Listvie, а как перерисовать рабочую область Listview?
    #38249361
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в принципе высоту header в Listview можно увеличить и организуя сабклассинг определенным образом можно стабильно поддерживать (т.е. не будет прыгать при скроллингах).
И даже без HDM_LAYOUT.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
'для событий ListView1
Public Function NewListView1WindowProc _
  (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Select Case Msg
...
   Case WM_PAINT:
     DrawHeaders Form1.ListView1

...

Public Sub DrawHeaders(ListView As ComctlLib.ListView)
  'перерисовка,ибо сам не удосуживается это сделать
  Dim pvHeaderhWnd As Long
  Dim lvFormat As LV_COLUMN
    
  pvHeaderhWnd = SendMessageLong(ListView.hwnd, LVM_GETHEADER, 0, 0)
  Call RedrawWindow(pvHeaderhWnd, ByVal 0&, ByVal 0&, RDW_INVALIDATE Or RDW_FRAME Or RDW_UPDATENOW)
    Dim rRB As RECT
    
  GetClientRect pvHeaderhWnd, rRB
  SetWindowPos pvHeaderhWnd, 0, 0, 0, rRB.Right - rRB.Left, 25, SWP_SHOWWINDOW
  
End Sub



За исключением нижних двух строчек я этот код кстати всегда использую совместно со стилем Or LVS_EX_DOUBLEBUFFER
-иначе headers стираются

Но при таком подходе сами итемы рисуются исходя из "родной" высоты (задвинуты под header), картинка внизу.
Побороть можно?

В примере что я приводил
Изменение высоты и расположения CHeaderCtrl и высоты строк CListCtrl с помощью сообщений HDM_LAYOUT
есть "фразочки":
Код: plaintext
1.
2.
3.
4.
5.
  //*** Decreases the table list height on the table header height
  pRect->top += m_nHdrHeight;

 //*** Decreases the table list height on the table header height
  pRect->top = m_nHdrHeight;



Думаю речь о том самом.
Но что делать на VB6 не врубаюсь.
Как это сделать?
...
Рейтинг: 0 / 0
Допустим изменил высоту header в Listvie, а как перерисовать рабочую область Listview?
    #38249533
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда хотя бы копать?

пробовал LVM_SETWORKAREAS, но это не для ReportView -не то
Как ему сказать: отступи 25 пикселей сверху и там начинай рисовать итемы?
Он же как то это делает, если меняю высоту headers изменением шрифта, или если стиль меняется.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Допустим изменил высоту header в Listvie, а как перерисовать рабочую область Listview?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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