2013-03-05 10 views
1

Мы разрабатываем настраиваемый элемент управления сеткой в ​​VB6 (все равно нужно использовать классический VB - извините :). Он имеет настраиваемый заголовок на основе стандартного элемента управления заголовками MS MS ComCtl, созданного с помощью соответствующего вызова WinAPI для CreateWindowEx. Элементы заголовка являются собственными рисунками (флаг HDF_OWNERDRAW), и нам нужно их полностью рисовать с нуля, но MS Header по-прежнему рисует эту странную трехмерную границу вокруг каждого элемента.Управление заголовком MS по-прежнему рисует границу для пользовательских рисунков

Кажется, это происходит как часть стандартной функциональности в WindowProc при обработке WM_PAINT. Но мы вообще не можем подавлять WM_PAINT, так как в этом случае сообщение WM_DRAWITEM не отправляется, и нам некуда рисовать наши элементы заголовка.

Как избавиться от этого стандартного чертежа 3D-границы для нашего заголовка подкласса API?

ответ

1

Мы использовали так называемые владельцы рисунков, когда нарисовано только «полезное содержимое». Но в нашем случае, чтобы нарисовать весь элемент с нуля, нам понадобилась общая технология пользовательского рисования, доступная в общих элементах управления MS. Это означает, что мы должны обработать сообщение уведомления NM_CUSTOMDRAW.

Вот пример из реальной рабочей код (WindowProc для родительского элемента управления):

Select Case uMsg 

Case WM_NOTIFY 
    CopyMemory tNMH, ByVal lParam, LenB(tNMH) 

    Select Case tNMH.Code 

    Case NM_CUSTOMDRAW 
     Dim tNMCD As NMCUSTOMDRAW 
     CopyMemory tNMCD, ByVal lParam, Len(tNMCD) 
     Select Case tNMCD.dwDrawStage 
     Case CDDS_PREPAINT 
     WindowProcParent = CDRF_NOTIFYITEMDRAW Or CDRF_NOTIFYPOSTPAINT ' CDDS_ITEMPREPAINT (below) will be raised for every item 
     Exit Function 
     Case CDDS_ITEMPREPAINT 
     pDrawItem tNMCD 
     WindowProcParent = CDRF_SKIPDEFAULT ' totally draw the column header by ourselves 
     Exit Function 
     Case CDDS_POSTPAINT 
     pPostPaint 
     Exit Function 
     End Select 

 Смежные вопросы

  • Нет связанных вопросов^_^