我想創建一個帶有兩個/多個拇指的SWT Scale小部件。問題是我希望它在每個平臺上都有本地皮膚,而不是自定義皮膚。如何獲取SWT小部件的皮膚?
實際上,我想獲取小部件的每個組件的皮膚並自己繪製它們。
任何想法如何做到這一點,或者可能是一個替代解決方案?
謝謝!
我想創建一個帶有兩個/多個拇指的SWT Scale小部件。問題是我希望它在每個平臺上都有本地皮膚,而不是自定義皮膚。如何獲取SWT小部件的皮膚?
實際上,我想獲取小部件的每個組件的皮膚並自己繪製它們。
任何想法如何做到這一點,或者可能是一個替代解決方案?
謝謝!
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);
}
}
你可以找到類名和部分和狀態ID在http://msdn.microsoft.com/en-us/library/windows/desktop/bb%28v=vs.85%29.aspx以及非主題API的類型和狀態http://msdn.microsoft.com/en-us/library/dd162480%28v=vs.85%29.aspx
請注意,並非所有控件都是非主題類型。我相信該尺度的拇指應該是非主題應用程序中的按鈕。
因爲上面的鏈接不給你的一部分,狀態和類型值的值,我建議從頭文件WINUSER.H和vsstyle.h讓他們。
編輯:對於規模,在非主題的應用程序我相信你必須使用拇指按鈕。另外,我忘記提及這是使用非文檔化的API,並且不可移植。
嗯..好吧..我的意思是本地工具包爲小部件的每個元素繪製的圖像。 – 2011-04-29 19:24:43
它可能不會使用圖像;該小部件可能會通過大量的繪製操作來構建。 – 2011-04-29 20:26:31
你說得對。我已經瀏覽了SWT窗口小部件代碼,看起來它只不過是一個封裝,我無法從中獲取組件的任何外觀數據。 謝謝! – 2011-04-29 21:35:00