Итак, мое намерение состоит в том, чтобы «претренировать» пользовательский интерфейс, над которым я работаю. Я знаком с использованием GDI + для ручного рисования моих элементов управления, но моя сегодняшняя цель — просто BitBlitting png на моем DC напрямую.
Это хорошо работает с основным кадром, несколькими кнопками и, возможно, некоторыми меню.
У меня вопрос — как бы вы скинули что-то более сложное, например, комбинированный список, просмотр списка или более «динамические» элементы управления, используя такие скины?
Спасибо. Моя целевая платформа — Windows, и я использую C ++ с фреймворком wxWidgets.
Чтобы «обработать» существующий элемент управления, вам придется разделить окно на подклассы и перехватить сообщения отрисовки.
грубо:
// Subclass the control
WNDPROC lpfnOldCtrlProc;
lpfnOldCtrlProc = (WNDPROC)SetWindowLong(ControlHwnd, GWL_WNDPROC,
(DWORD)WinSubClassFunc );
и в вашем WinSubClassFunc:
switch( message )
{
case WM_DRAWITEM: // owner-draw the item
Однако, если вы хотите полностью «скинуть» элемент управления, например, изменить все элементы ComboBox (границы, поля ввода, выпадающий список, раскрывающийся список и т. д.), то это становится действительно беспорядочный.
Лично я считаю, что проще создать свой собственный элемент управления с нуля, чем пытаться создать подкласс существующего элемента управления, который состоит из нескольких элементов окна.
Вышеуказанные методы отлично работают, например, для используя стандартный комбинированный список с раскрывающимся списком и создайте его подкласс, чтобы он содержал раскрывающийся список цветных полос.
Других решений пока нет …