Как получить скин SWT виджета? - PullRequest
0 голосов
/ 29 апреля 2011

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

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

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

Спасибо!

Ответы [ 4 ]

2 голосов
/ 29 апреля 2011

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

1 голос
/ 08 декабря 2011

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

0 голосов
/ 09 мая 2012

В 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 и не является переносимым.

0 голосов
/ 09 декабря 2011

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

...