Цвет Grid Lines в List View

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Цвет Grid Lines в List View

Сообщение burik » 12.07.2007 (Чт) 13:30

Здравствуйте, скажите как поменять цвет линий сетки в List View-контроле?
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 13.07.2007 (Пт) 2:46

Осторожно спрошу.
A WM_PAINT на произвольном окне своей программы отловить сможешь? А то ведь есть еще HTML, как оказалось тут недавно в одной теме.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.07.2007 (Пт) 4:30

Блин. Какая-то актуальная пролблема.

Выложу на всякий случай часть кода своего проекта:

Подготовка:
Код: Выделить всё
        WPHooker.HookObject .HTTPGridBase, AddressOf WindowProc
       
        lHTTPGridBaseStyle = GetWindowLong(.HTTPGridBase.hwnd, GWL_STYLE)
       
       
        SetWindowLong .HTTPGridBase.hwnd, GWL_STYLE, lHTTPGridBaseStyle Or LVS_OWNERDRAWFIXED ' Or LVS_SHOWSELALWAYS



отрисовка:

Код: Выделить всё
Public Function WindowProc(ByVal hwnd As Long, ByVal MsgID As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case hwnd
        Case 'вырезано
         'вырезано
         ' ...
         'вырезанор
        Case FMain.HTTPGridParent.hwnd
            Select Case MsgID
                Case WM_DRAWITEM
                    Dim DIInfo          As DRAWITEMSTRUCT
                    Dim FreePoint       As POINTAPI
                    MDeclarations.CopyMemory VarPtr(DIInfo), lParam, Len(DIInfo)
                    //////////////////////////////////////////////////////////
                        И вот тут у вас имеется хорошая такая структура DIInfo,
                        и, в частности, DIInfo.hdc , на котором вы можете рисовать.               
                    ////////////////////////////////////////////////////////////
                   
                Case Else
                    WindowProc = CallWindowProc(WPHooker.GetObjectSolidWPA(hwnd), hwnd, MsgID, wParam, lParam)
            End Select
        Case FMain.HTTPGridBase.hwnd
              ' Вырезано, много, всякого
        Case HTTPGridBaseHDRHandle
              ' Вырезано, много, всякого   
    End Select
End Function



Прим.:
1) Всё что вырезано - не нужно.
2) WPHooker - мой сабклассер. Считай вызов HookObject установкой сабклассинга, а вызов GetObjectSolidWPA - получением адреса оригинального (т.е. того, который был до самого первого HookObject) WindowProc-а.
3) Заметь, что в селект-кейсе FMain.HTTPGridParent.hwnd, а не FMain.HTTPGridBase.hwnd
4) Рекомендую для каждого случая делать свой windowproc, а не пихать всё в один и городить Select-Case. Конечно, если скорость тебе важна.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 13.07.2007 (Пт) 21:51

EUGY
Уже смогу. Я сабкласингом раньше не пользовался (или пользовался тупым копированием кода :lol: ). Но пару дней назад в проге потребовалось менять BgCloror итема и я решил наконец-таки заняться сабкласингом. :)

Хакер
Спасибо, особенно за второй отрезок кода.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 14.07.2007 (Сб) 10:20

burik
И кстати, не нужно рисовать вертикальные линии сетки при каждом получении WM_DRAWITEM - достаточно рисовать их один раз, в самом начале. Но есть один момент, касающийся высоты этих линий.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 30

    TopList