WM_DRAWITEM SysTabControl32 перекрашивается? - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно изменить стиль нашего SysTabControl32, поэтому я пытаюсь использовать TCS_OWNERDRAWFIXED и WM_DRAWITEM.Все работает хорошо, но кажется, что вкладки по-прежнему перекрашены системой.

К сожалению, код в Visual Objects делает вещи более сложными.Я уже много чего перепробовал за последние часы и пока что ничего не понимаю.Может быть, некоторые из вас, ребята, могут помочь или дать подсказку маме.

Вот несколько картинок:

"Голый" Tabcontrol с TCS_OWNERDRAWFIXED.Нет кода на WM_DRAWITEM.

Вы заметите, что вкладки не заполнены, но 3D-стиль окрашен.И это моя главная проблема, потому что, насколько я знаю, этого не должно быть.

image

Отобранные владельцем вкладки с цветом текста и фона (некрасиво, нополезно, чтобы увидеть проблему)

image

Тот же TabControl, но с установленными TCS_FLATBUTTONS и TCS_EX_FLATSEPARATORS.Тем не менее проблема с серым фоном.

image

Как вы знаете, WM_DRAWITEM будет перехватываться в родительском окне.Я также пытался перезаписать или игнорировать WM_PAINT в самом TabControl.Но это не помогает.

Также я играл с WM_ERASEBKGND, но я застрял на этом этапе.

На всех страницах, начиная с codeplex до codeguru или даже vbAccelerator, он должен работать.Должен :) Не знаю, если это визуальные объекты, но API являются API, и это все еще стандартный элемент управления.

WM_DRAWITEM содержит этот код, который выглядит нормально.Элемент DRAWITEMSTRUCT.

hdc := item.hdc
tabIndex := item.itemID
lSelected := (item.itemState == ODS_SELECTED)

wBrush := CreateSolidBrush(RGB(128,128,255))
FillRect(hdc, @item.rcItem, wBrush)
DeleteObject(wBrush)

SetBkMode(hdc,TRANSPARENT)
tTI := MemAlloc(_SizeOf(_winTC_ITEM))
tTI.cchTextMax := 255
tTI.pszText := String2Psz(Buffer(255))
tTI.mask := TCIF_TEXT
lr := SendMessage(item.hwndItem, TCM_GETITEM, item.itemID, LONG(_CAST, tTI))
if (lr != 0)
     if (lSelected)
         SetTextColor(hdc,RGB(255,0,0))
     ELSE
         SetTextColor(hdc,RGB(0,0,255))
     ENDIF
     DrawText(hdc,tTI.pszText,-1,@item.rcItem, _OR(DT_SINGLELINE, DT_VCENTER, DT_CENTER))
ENDIF
MemFree(tTI)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...