2011-04-29 49 views
0

我想創建一個帶有兩個/多個拇指的SWT Scale小部件。問題是我希望它在每個平臺上都有本地皮膚,而不是自定義皮膚。如何獲取SWT小部件的皮膚?

實際上,我想獲取小部件的每個組件的皮膚並自己繪製它們。

任何想法如何做到這一點,或者可能是一個替代解決方案?

謝謝!

回答

2

SWT小部件沒有皮膚(如Swing小部件),它們由本機窗口工具包(Win32,Gtk +等)繪製。

+0

嗯..好吧..我的意思是本地工具包爲小部件的每個元素繪製的圖像。 – 2011-04-29 19:24:43

+0

它可能不會使用圖像;該小部件可能會通過大量的繪製操作來構建。 – 2011-04-29 20:26:31

+0

你說得對。我已經瀏覽了SWT窗口小部件代碼,看起來它只不過是一個封裝,我無法從中獲取組件的任何外觀數據。 謝謝! – 2011-04-29 21:35:00

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); 
    } 
} 

你可以找到類名和部分和狀態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.Hvsstyle.h讓他們。

編輯:對於規模,在非主題的應用程序我相信你必須使用拇指按鈕。另外,我忘記提及這是使用非文檔化的API,並且不可移植。