在对话框和窗体中使用系统图标
2010-07-15 20:45:02 来源:WEB开发网如果你想在自己的对话框或其它窗体中使用这些系统图标,方法是这样的:首先按通常方式创建一个静态控制,然后用下面的方法加载并显示图标:
HICON hicon = ::LoadIcon(NULL, IDI_HAND);
m_wndStatic.SetIcon(hicon);
这里假设m_wndStatic是你在对话框或窗体中创建的一个CStatic控制。在例子程序的“关于”对话框中,你可以看到一个问号图标,并且这个图标也有一个URL链接,这是因为使用了CStaticLink超链接类的缘故,它是由CStatic派生而来的。
虽然对系统图标的处理没有什么深奥的东西,但Windows把这些简单的东西弄得有点复杂化了,从图一中不难看出,IDI_HAND已不再是手的形状,至少在Windows2000和Window XP中是如此。从称呼上看也变味了,IDI_ASTERISK成了一个含有字母“i”的球形形状。微软对这种词汇上出现的困惑所做的解释是:老版本的Windows显示手形和星号;新版本则是用新的图标。在winuser.h文件中可以窥见这些变化:
#if(WINVER >= 0x0400)
#define IDI_WARNING IDI_EXCLAMATION
#define IDI_ERROR IDI_HAND
#define IDI_INFORMATION IDI_ASTERISK
#endif /* WINVER >= 0x0400 */
如果你想跟上微软的这些变化,那么就使用新符号好了。这样你的代码也会更可读一些,因为现在的警告、错误和信息符号更能传达图标所要表达的本意。
另外一个令人困惑的东西是:虽然winuser.h中新增了一个新的符号IDI_WINLOGO。在基于Windows XP的应用程序里使用这个图标产生的效果并不是我们所熟悉的那个家喻户晓飞扬的窗口标志,而是图一里IDI_APPLICATION所表示的一般窗口标志。仔细阅读有关文档后,你会发现微软对此的解释是“设计行为”。为什么这个具有某种代表意义的东西在不同的Windows OS中表现得如此模棱两可呢?此中缘由鲜为人知。
本文配套源码
更多精彩
赞助商链接