0

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

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

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

谢谢!

4

4 回答 4

2

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

于 2011-04-29T18:44:24.920 回答
1

看看 Riena 的外观和感觉: http ://wiki.eclipse.org/Riena_Look_and_Feel

于 2011-12-08T19:20:31.037 回答
0

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

于 2011-12-09T08:29:02.437 回答
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 API 位于http://msdn.microsoft.com/en-us/library/dd162480%28v=vs.85%29.aspx

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

因为上面的链接没有为您提供部件、状态和类型值的值,所以我建议从头文件winuser.hvsstyle.h中获取它们。

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

于 2012-05-09T08:36:18.290 回答