10.3 使用 wxIcon 编程
一个 wxIcon 代表一个小的位图,它总有一个透明遮罩,它的用途包括:
- 设置 frame 窗口或者对话框的图标
- 通过 wxImageList 类给 wxTreeCtrl, wxListCtrl 或者 wxNotebook 提供图标 (更多信息请参考最后一章)
- 使用 wxDC::DrawIcon 函数在设备上下文中绘制一个图标
下表列出了图标类的主要成员函数
wxIcon | 图标类可以通过指定另外一个图标类的方式,指定 XPM 数据(char**) 的方式,原始数据(char[]) 的方式,或者文件名及文件类型的方式创建。 |
---|---|
CopyFromBitmap | 从 wxBitmap 类创建一个图标。 |
GetWidth, GetHeight | 返回图标的大小。 |
Getdepth | 返回图标的颜色深度。 |
LoadFile | 从文件加载图标。 |
Ok | 在图标数据已经具备的时候返回 True。 |
创建一个 wxIcon
wxIcon 可以使用 XPM 数据创建,或者从一个 wxBitmap 对象中创建,或者从文件(比如一个 Xpm 文件) 中读取.wxWidgets 也提供了类似于前一小节提到的 wxBITMAP 类似的宏,用来从一个平台相关的资源中获取图标。
在 windows 平台上,LoadFile 以及同等性质的操作可以使用的文件类型包括 BMP 图片和 ICO 文件,如果你要从其它图片格式中创建图标,可以先将其读入一个 wxBitmap 对象中,然后再将其转换为一个图标。
而在 Mac OSX 和 Unix/Linux 的 GTK+版本中,wxIcon 可以识别的图片类型和 wxBitmap 可以识别的图片类型是一样的。
下面代码演示了创建一个 wxIcon 对象的几种方法:
// 方法 1: 从 XPM 数据创建
#include "icon1.xpm"
wxIcon icon1(icon1_xpm);
// 方法 2: 从一个 ICO 资源中创建(Window and OS/2 only)
wxIcon icon2(wxT("icon2"));
// 方法 3: 从一个图片文件中 (Windows and OS/2 only)
// 如果你的图片包含多个图标你可以指定单个图标的宽度
wxIcon icon3(wxT("icon3.ico"), wxBITMAP_TYPE_ICO, 16, 16);
// 方法 4: 从位图创建
wxIcon icon4;
wxBitmap bitmap(wxT("icon4.png"), wxBITMAP_TYPE_PNG);
icon4.CopyFromBitmap(bitmap);
使用 wxIcon
下面的代码演示了 wxIcon 的三种使用方法:设置窗口图标,增加到一个图片列表或者绘制在某个设备上下文上
#include "myicon.xpm"
wxIcon icon(myicon_xpm);
// 1: 设置窗口图标
frame->SetIcon(icon);
// 2: 增加到 wxImageList
wxImageList* imageList = new wxImageList(16, 16);
imageList->Add(icon);
// 3: 在(10, 10) 的位置绘制
wxClientDC dc(window);
dc.DrawIcon(icon, 10, 10);
将某个图标绑定到应用程序
将某个图标绑定到应用程序,以便系统可以显示这个图标在合适的位置使得用户可以通过点击图标的方式打开应用程序,这个工作 wxWidgets 是做不到的.这是极少的你需要在不同的平台使用不同的技术的领域中的一个。
在 windows 平台上,你需要在 makefile 中增加一个资源文件(扩展名是.rc),并且在这个资源文件中指定一个图标区域,如下所示:
aardvarkpro ICON aardvarkpro.ico
#include "wx/msw/wx.rc"
在这里, aardvarkpro.ico 就是这个和应用程序绑定的图标的名称,它可以有多种分辨率和颜色深度(典型的大小包括 48x48,32x32 和 16x16).当 windows 的资源管理器需要显示某个图标的时候,它将使用子母顺序排在第一个的那个图标,因此你最好给确定要作为应用程序图标的那个图标的名称前面加几个 a 子母以便按照子母顺序它排在前面,否则你的应用程序可能绑定的是你不期望的图标。
在 Mac 系统上,你需要准备一个应用程序包,其中包含一些 ICNS 文件.参考第 20 章"让你的程序更完美",来获得关于程序包更多的信息,其中的主要文件 Info.plist 文件看上去应该象下面的额样子:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>pjd</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>dialogblocks-doc.icns</string>
<key>CFBundleTypeName</key>
<string>pjdfile</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
</array>
<key>CFBundleIconFile</key>
<string>dialogblocks-app.icns</string>
...
应用程序图标和应用程序相关的文档类型图标是由 CFBundleIconFile 和 CFBundleTypeIconFile 属性指定的.你可以直接用 Apple 提供图标编辑器编辑 ICNS 文件,不过如果你希望所有的平台使用同样的图标,你最好现用 PNG 图片创建各种大小的图标,然后再将它粘贴到各个平台上的图标编辑器中,要确保 PNG 使用的透明遮罩颜色和各个工具使用的透明颜色相一致。
而在 linux 平台上,Gnome 桌面系统和 KDE 桌面系统则各自拥有自己的图标提供体系,我们将在第 20 章进行简要的描述。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论