檢視原始碼 wxArtProvider (wx v2.4.3)
wxArtProvider
類別用於自訂 wxWidgets 應用程式的外觀。
當 wxWidgets 需要顯示圖示或點陣圖時 (例如在標準檔案對話方塊中),它不會使用硬式編碼的資源,而是向 wxArtProvider
要求。如此一來,使用者可以插入自己的 wxArtProvider
類別,並輕鬆地用自己的版本取代標準美工圖案。
所有需要做的是從 wxArtProvider
衍生一個類別,覆寫其 wxArtProvider::CreateBitmap()
(在 wx 中未實作) 和/或其 wxArtProvider::CreateIconBundle()
(在 wx 中未實作) 方法,並使用 wxArtProvider::Push()
(在 wx 中未實作) 註冊提供者。
如果您需要 (相同美工圖案的) 點陣圖影像,且應該以不同大小顯示,您可能應該考慮覆寫 wxArtProvider::CreateIconBundle
(在 wx 中未實作),並提供包含不同點陣圖大小的圖示包。
還有另一種利用此類別的方法:您可以在程式碼中使用它,並使用 getBitmap/2
或 getIcon/2
提供的平台原生圖示。
識別美工圖案資源
每個點陣圖和圖示包在 wxArtProvider
中都有一個唯一的 ID,在向其請求資源時會使用該 ID。該 ID 由 ?wxArtID 類型表示,並且可以具有以下預先定義的值之一 (您可以在 page_samples_artprov 中看到以這些常數表示的點陣圖)
此外,任何由使用 wxArtProvider::Push
(在 wx 中未實作) 註冊的自訂美工圖案提供者識別的字串也可以使用。
注意:當在 GTK+ 2 下執行時,GTK+ 庫存項目 ID (例如 "gtk-cdrom"
) 也可以使用:如需 GTK+ 庫存項目的清單,請參閱 GTK+ 文件頁面。也可以透過指定其名稱 (不含副檔名和目錄元件) 從目前的圖示主題載入圖示。GTK+ 識別的圖示主題遵循 freedesktop.org 的 圖示主題規格。請注意,主題不保證包含所有圖示,因此 wxArtProvider
可能會傳回 ?wxNullBitmap 或 ?wxNullIcon。預設主題通常安裝在 /usr/share/icons/hicolor
中。
用戶端
client
是呼叫 wxArtProvider
的 getBitmap/2
或 getIcon/2
函數的實體。它由 wxClientID 類型表示,並且可以具有以下值之一
wxART_TOOLBAR
wxART_MENU
wxART_BUTTON
wxART_FRAME_ICON
wxART_CMN_DIALOG
wxART_HELP_BROWSER
wxART_MESSAGE_BOX
wxART_OTHER
(用於所有不屬於上述任何類別的請求)
用戶端 ID 作為 wxArtProvider
的提示,應該有助於它選擇外觀最佳的點陣圖。例如,即使它們表示相同的動作 (例如 wxART_FILE_OPEN),通常也希望在選單和工具列中使用稍微不同的圖示。請記住,這實際上只是給 wxArtProvider
的提示 - getBitmap/2
針對不同的用戶端值傳回相同的點陣圖是很常見的!
參閱
wxWidgets 文件:wxArtProvider
摘要
類型
-type wxArtProvider() :: wx:wx_object().
函式
-spec getBitmap(Id) -> wxBitmap:wxBitmap() when Id :: unicode:chardata().
等效於 getBitmap(Id, [])
。
-spec getBitmap(Id, [Option]) -> wxBitmap:wxBitmap() when Id :: unicode:chardata(), Option :: {client, unicode:chardata()} | {size, {W :: integer(), H :: integer()}}.
查詢註冊的提供者以取得具有指定 ID 的點陣圖。
傳回值:如果註冊的提供者之一識別該 ID,則傳回點陣圖,否則傳回 wxNullBitmap。
-spec getIcon(Id) -> wxIcon:wxIcon() when Id :: unicode:chardata().
等效於 getIcon(Id, [])
。
-spec getIcon(Id, [Option]) -> wxIcon:wxIcon() when Id :: unicode:chardata(), Option :: {client, unicode:chardata()} | {size, {W :: integer(), H :: integer()}}.
與 getBitmap/2
相同,但傳回 wxIcon
物件 (失敗時則傳回 ?wxNullIcon)。