WEB开发网
开发学院软件开发VC 在对话框和窗体中使用系统图标 阅读

在对话框和窗体中使用系统图标

 2010-07-15 20:45:02 来源:WEB开发网   
核心提示:大家知道,很多Windows程序都要使用MessageBox,在对话框和窗体中使用系统图标,只要在这个API函数的一个参数中使用MB_ICONQUESTION标志,便可以在MessageBox的对话框中显示问号图标,图一 例子程序运行画面上图是例子程序在Windows 2000+SP3中运行结果,实现的细节都在main

大家知道,很多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;
    ......
  {

1 2  下一页

Tags:对话框 窗体 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接