Мне нужно изменить стиль нашего SysTabControl32, поэтому я пытаюсь использовать TCS_OWNERDRAWFIXED и WM_DRAWITEM.Все работает хорошо, но кажется, что вкладки по-прежнему перекрашены системой.
К сожалению, код в Visual Objects делает вещи более сложными.Я уже много чего перепробовал за последние часы и пока что ничего не понимаю.Может быть, некоторые из вас, ребята, могут помочь или дать подсказку маме.
Вот несколько картинок:
"Голый" Tabcontrol с TCS_OWNERDRAWFIXED.Нет кода на WM_DRAWITEM.
Вы заметите, что вкладки не заполнены, но 3D-стиль окрашен.И это моя главная проблема, потому что, насколько я знаю, этого не должно быть.
![image](https://www.bilder-upload.eu/upload/a28168-1556197695.png)
Отобранные владельцем вкладки с цветом текста и фона (некрасиво, нополезно, чтобы увидеть проблему)
![image](https://www.bilder-upload.eu/upload/ca9d30-1556197633.png)
Тот же TabControl, но с установленными TCS_FLATBUTTONS и TCS_EX_FLATSEPARATORS.Тем не менее проблема с серым фоном.
![image](https://www.bilder-upload.eu/upload/be982a-1556197811.png)
Как вы знаете, 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)