2008年(909)
分类:
2008-05-06 21:34:20
下载源代码
大家知道,很多Windows程序都要使用MessageBox,只要在这个API函数的一个参数中使用MB_ICONQUESTION标志,便可以在MessageBox的对话框中显示问号图标。这样用不同的标志便可以显示不同的图标。与Windows以前的老版本相比,Windows
2000以及Windows XP中的图标越来越好看,种类也越来越多。为了更广泛地使用这些漂亮的图标,本文将介绍如何把它们运用到自己的对话框或窗体中去。为此,首先要解决的问题是:在哪里以及如何获取这些图标?
这个问题属于Windows中最基本的问题,同时也是最容易搞忘的问题。现在我们来看看一般情况下,我们是如何做的,通过使用预定义的形式为IDI_XXX的资源IDs作为参数调用::LoadIcon函数,我们可以获取任何所谓的系统图标。例如:
HICON hIconQuestion = ::LoadIcon(NULL, IDI_QUESTION);图一是本文例子程序的运行画面,图中显示了所有的系统图标。
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; ...... {如果你想在自己的对话框或其它窗体中使用这些系统图标,方法是这样的:首先按通常方式创建一个静态控制,然后用下面的方法加载并显示图标:
HICON hicon = ::LoadIcon(NULL, IDI_HAND); m_wndStatic.SetIcon(hicon);这里假设m_wndStatic是你在对话框或窗体中创建的一个CStatic控制。在例子程序的“关于”对话框中,你可以看到一个问号图标,并且这个图标也有一个URL链接,这是因为使用了CStaticLink超链接类的缘故,它是由CStatic派生而来的。
#if(WINVER >= 0x0400) #define IDI_WARNING IDI_EXCLAMATION #define IDI_ERROR IDI_HAND #define IDI_INFORMATION IDI_ASTERISK #endif /* WINVER >= 0x0400 */如果你想跟上微软的这些变化,那么就使用新符号好了。这样你的代码也会更可读一些,因为现在的警告、错误和信息符号更能传达图标所要表达的本意。