如何获取SWT小部件的外观?

时间:2011-04-29 17:06:26

标签: java widget swt skin

我想创建一个带有两个/多个拇指的SWT Scale小部件。问题是我希望它在每个平台上都有原生皮肤而不是自定义皮肤。

实际上,我想获取小部件的每个组件的皮肤并自己绘制它们。

任何想法如何做到这一点,或者可能是替代解决方案?

谢谢!

4 个答案:

答案 0 :(得分:2)

SWT小部件没有外观(如Swing小部件那样),它们由本机窗口工具包(Win32,Gtk +等)绘制。

答案 1 :(得分:1)

答案 2 :(得分:0)

虽然Peter的答案是正确的,但您可以尝试用不同位置的拇指截取Scale的屏幕截图并覆盖它们。有关此技术的示例,请参阅http://tom-eclipse-dev.blogspot.com/2007/01/tableviewers-and-nativelooking.html

答案 3 :(得分:0)

在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找到类名称,部分和州ID以及http://msdn.microsoft.com/en-us/library/dd162480%28v=vs.85%29.aspx

的非主题API的类型和状态

请注意,并非所有控件都具有非主题类型。我相信,缩放的拇指应该是非主题应用程序中的按钮。

因为上面的链接没有给出部件,状态和类型值的值,我建议从头文件 winuser.h vsstyle.h

编辑:对于比例,在非主题应用程序中我相信你必须使用拇指按钮。另外,我忘了提到这使用了未记录的API,并且它不可移植。