Как получить скин виджета SWT?

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

Практически, я хочу получить скин каждого компонента виджета и нарисовать их сам.

Есть идеи, как это сделать, или, может быть, альтернативное решение?

Спасибо!

4 ответа

Решение

У виджетов SWT нет скинов (как у виджетов Swing), они рисуются с помощью встроенного инструментария управления окнами (Win32, Gtk+ и т. Д.).

Посмотрите на Riena Look and Feel: http://wiki.eclipse.org/Riena_Look_and_Feel

Пока ответ Питера верен, вы можете попытаться сделать скриншоты Scale с большими пальцами в разных позициях и накладывать их. См. http://tom-eclipse-dev.blogspot.com/2007/01/tableviewers-and-nativelooking.html для примера этой техники.

В Windows, прежде чем SWT реализует API для элементов управления рисованием: сначала проверьте, является ли приложение тематическим, а затем используйте тот или иной API рисования:

public void paintTheme(GC gc, Shell shell, Rectangle bounds)
    RECT rect = new RECT();
    rect.left = bounds.x;
    rect.right = bounds.x + bounds.width;
    rect.top = bounds.y;
    rect.bottom = bounds.y + bounds.height;
    if (OS.IsAppThemed()) {
        int theme = OS.OpenThemeData(shell.handle, className);
        OS.DrawThemeBackground(theme, gc.handle, partId, stateId, rect, null);
        OS.CloseThemeData(theme);
    } else {
        OS.DrawFrameControl(gc.handle, rect, uType, uState);
    }
}

Имена классов и идентификаторы частей и состояний можно найти по адресу http://msdn.microsoft.com/en-us/library/windows/desktop/bb773210%28v=vs.85%29.aspx а также типы и состояния для не тематических API по http://msdn.microsoft.com/en-us/library/dd162480%28v=vs.85%29.aspx

Обратите внимание, что не все элементы управления имеют не тематический тип. Я считаю, что большой палец для шкалы должен быть кнопкой в ​​не тематических приложениях.

Поскольку ссылки выше не дают вам значения для детали, состояния и значения типа, я предлагаю получить их из заголовочных файлов winuser.h и vsstyle.h.

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

Другие вопросы по тегам