在对话框和窗体中使用系统图标
2010-07-15 20:45:02 来源:WEB开发网大家知道,很多Windows程序都要使用MessageBox,只要在这个API函数的一个参数中使用MB_ICONQUESTION标志,便可以在MessageBox的对话框中显示问号图标。这样用不同的标志便可以显示不同的图标。与Windows以前的老版本相比,Windows 2000以及Windows XP中的图标越来越好看,种类也越来越多。为了更广泛地使用这些漂亮的图标,本文将介绍如何把它们运用到自己的对话框或窗体中去。为此,首先要解决的问题是:在哪里以及如何获取这些图标?
这个问题属于Windows中最基本的问题,同时也是最容易搞忘的问题。现在我们来看看一般情况下,我们是如何做的,通过使用预定义的形式为IDI_XXX的资源IDs作为参数调用::LoadIcon函数,我们可以获取任何所谓的系统图标。例如:
HICON hIconQuestion = ::LoadIcon(NULL, IDI_QUESTION);
图一是本文例子程序的运行画面,图中显示了所有的系统图标。
图一 例子程序运行画面
上图是例子程序在Windows 2000+SP3中运行结果。实现的细节都在mainfrm,cpp文件中。SysIcons[]是一个结构数组,其元素定义了图标资源的ID和名称:
const struct {
LPCTSTR nResID;
LPCTSTR name;
} SysIcons[] = {
{ IDI_APPLICATION, _T("IDI_APPLICATION") },
{ IDI_HAND, _T("IDI_HAND") },
{ IDI_QUESTION, _T("IDI_QUESTION") },
{ IDI_EXCLAMATION, _T("IDI_EXCLAMATION") },
{ IDI_ASTERISK, _T("IDI_ASTERISK") },
#if(WINVER >= 0x0400)
{ IDI_WINLOGO, _T("IDI_WINLOGO") },
{ IDI_WARNING, _T("IDI_WARNING") },
{ IDI_ERROR, _T("IDI_ERROR") },
{ IDI_INFORMATION, _T("IDI_INFORMATION") },
#endif
{ NULL, NULL }
};
加载图标是在CMainFrame::OnPaint()中进行的:
......
for (UINT i=0; SysIcons[i].nResID; i++) {
HICON hicon = ::LoadIcon(NULL, SysIcons[i].nResID);
ASSERT(hicon);
CString name = SysIcons[i].name;
......
{
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接