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