Скиннинг пользовательского интерфейса с графикой

Итак, мое намерение состоит в том, чтобы «претренировать» пользовательский интерфейс, над которым я работаю. Я знаком с использованием GDI + для ручного рисования моих элементов управления, но моя сегодняшняя цель — просто BitBlitting png на моем DC напрямую.

Это хорошо работает с основным кадром, несколькими кнопками и, возможно, некоторыми меню.
У меня вопрос — как бы вы скинули что-то более сложное, например, комбинированный список, просмотр списка или более «динамические» элементы управления, используя такие скины?

Спасибо. Моя целевая платформа — Windows, и я использую C ++ с фреймворком wxWidgets.

0

Решение

Чтобы «обработать» существующий элемент управления, вам придется разделить окно на подклассы и перехватить сообщения отрисовки.
грубо:

// Subclass the control
WNDPROC lpfnOldCtrlProc;
lpfnOldCtrlProc = (WNDPROC)SetWindowLong(ControlHwnd, GWL_WNDPROC,
(DWORD)WinSubClassFunc );

и в вашем WinSubClassFunc:

switch( message )
{
case WM_DRAWITEM: // owner-draw the item

Однако, если вы хотите полностью «скинуть» элемент управления, например, изменить все элементы ComboBox (границы, поля ввода, выпадающий список, раскрывающийся список и т. д.), то это становится действительно беспорядочный.
Лично я считаю, что проще создать свой собственный элемент управления с нуля, чем пытаться создать подкласс существующего элемента управления, который состоит из нескольких элементов окна.

Вышеуказанные методы отлично работают, например, для используя стандартный комбинированный список с раскрывающимся списком и создайте его подкласс, чтобы он содержал раскрывающийся список цветных полос.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]