查看源代码 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)。