2015-04-28 5 views
0

Есть ли способ изменить цвет линий и фона CMFCBaseTabCtrl?CMFCTabCtrl настройка цвета

Я могу изменить цвет вкладок с помощью SetTabBkColor(...) или SetAutoColors(...), но заголовок и линии управления остаются серыми.

SetSysColors(...) не является вариантом, поскольку он изменяет цвета по всему миру для всей ОС.

В принципе, нам необходимо применить цветовую схему Lite/Dark. Я не могу найти способ изменить фон управления вкладками и цвета линий. Когда цвет фона вкладки установлен на SetTabBkColor(...), он оставляет пространство возле границы вкладки.

Также ожидается, что SetActiveTabColor(...) изменит фон активной вкладки, но ничего не делает.

И нет способа изменить цвет текста активной вкладки. Я верю, что этот материал настраивается, но не может найти способ.

enter image description here

+0

You должны быть более конкретными. CMFCBaseTabCtrl не содержит кода для рисования. Какой элемент вы хотите изменить? – xMRi

+0

Мне нужно применить темную цветовую схему ко всему материалу. Я добавил изображение выше, которое показывает, что требуется. – ChatCloud

+0

Снова! Это не CMFCBaseTabCtrl, это должно быть что-то, полученное от CMFCBaseTabCtrl! Что это за вкладка Ctrl? CMFCBaseTabCtrl - это базовый класс чистых виртуальных функций ... Пожалуйста, уточните свой вопрос! – xMRi

ответ

1

Цвета извлекаются из текущего экземпляра CMFCVisualManager.

CMFCVisualManager :: GetTabFrameColors используется. И некоторые другие управляющие функции, такие как OnEraseTabsFrame и OnEraseTabsArea.

Получите ваш собственный визуальный менеджер из того, который вы предпочитаете. Перезапишите конкретные функции и вы можете изменить цвета и поведение.

Другого выхода нет. Просто лок в исходный код в ничтожной CMFCTabCtrl :: OnDraw (CDC * PDC)

C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ atlmfc \ SRC \ тк \ afxtabctrl.cpp

+0

yep, я вижу. однако эти цвета используются для рисования линий, а не 3D-моментов вкладок. Фактическая вкладка выполняется CMFCVisualManager :: OnDrawTab (...). Поэтому мне понадобится собственный менеджер impement, который переопределяет эти 4 метода. – ChatCloud

+0

Просто попробовал обходное решение, чтобы изменить afxGlobalData.clrBarHilite, afxGlobalData.clrBarShadow и afxGlobalData.clrBarDkShadow. Он работает для строк, но не для заполнения. Так что нет простого способа. – ChatCloud

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