我想创建一个带有两个/多个拇指的 SWT Scale 小部件。问题是我希望它在每个平台上都有本机皮肤,而不是定制皮肤。
实际上,我想获取小部件每个组件的皮肤并自己绘制它们。
任何想法如何做到这一点,或者可能是替代解决方案?
谢谢!
SWT 小部件没有皮肤(如 Swing 小部件那样),它们由本地窗口工具包(Win32、Gtk+ 等)绘制。
看看 Riena 的外观和感觉: 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和非主题的类型和状态中找到类名和部分和状态 ID API 位于http://msdn.microsoft.com/en-us/library/dd162480%28v=vs.85%29.aspx
请注意,并非所有控件都具有非主题类型。我相信比例尺的拇指应该是非主题应用程序中的按钮。
因为上面的链接没有为您提供部件、状态和类型值的值,所以我建议从头文件winuser.h和vsstyle.h中获取它们。
编辑:对于规模,在非主题应用程序中,我相信您必须使用拇指按钮。另外,我忘了提到这使用了未记录的 API,而且它是不可移植的。