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

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

时间: 2025-01-21 13:45:21

在对话框和窗体中使用系统图标的相关文章

Win7通知区域中的系统图标“操作中心”显示灰色怎么办

  操作中心显示灰色图: 解决步骤: 1.打开控制面板,点击打开"操作中心"项; 2.在打开的操作中心界面中,点击窗口左侧的"更改用户账户控制设置"项; 3.在用户账户控制设置界面中,发现被设置为不推荐项,这里将始终通知级别重新调为上两档,然后重启计算机即可,就可以重新打开操作中心了.

Windows XP中实现系统备份与还原

1.使用系统还原功能备份操作系统 系统还原可在Windows XP图形界面下进行,如果进入不了图形界面,也可以在命令行模式下进行. (1)启动系统还原功能 默认情况下,Windows XP系统还原功能是开启的.如果系统还原功能被关闭,可按以下方式启动: 单击"开始→控制面板"菜单项,在出现的对话框中双击"系统"图标,打开"系统属性"对话框,单击"系统还原"选项卡,单击取消"在所有驱动器上关闭系统还原"选项.

汇编教程:系统托盘中的快捷图标

本课中,我们将学习如何把小图标放到系统托盘中去以及如何创建和使用弹出式菜单. 理论: 系统托盘是指任务条中的一个方形区域,在该区域中可以放入一些小图标,通常您可以在此处看到系统提供的最新时间.您自己当然也可以把快捷小图标放到此处.下面是这么做的步骤: 设置NOTIFYICONDATA型的结构体变量的成员变量的值: cbSize 该结构体的大小. hwnd 窗口的句柄.当鼠标滑过该小图标时,该窗口将接收到相关的消息. uID 小图标的ID号.您可以取任意值,只是当您的应用程序有不止一个小图标时,您

更改XP系统中文件夹图标

  在windows xp操作系统中,可以非常方便地更改文件夹的图标,从而使文件夹的图标独具特色. 第1步:打开"我的电脑",在需更改图标的文件夹上单击鼠标右键,在弹出的快捷菜单中选择"属性"命令. 第2步:在打开的文件夹属性对话框中切换到"自定义"选项卡,在"文件夹图标"栏中单击"更改图标"按钮. 第3步:在打开对话框的列表框中选择一个图标,确定后即可为文件夹更改图标,或者单击"浏览"

VB中从主窗体中设置子窗体中的TrueDbGrid的过滤数据,是非模态的对话框?

问题描述 VB中从主窗体中设置子窗体中的TrueDbGrid的过滤数据,是非模态的对话框? VB中从主窗体中设置子窗体中的TrueDbGrid的过滤数据,是非模态的对话框? 解决方案 在子窗体中定义一个函数 public sub setgrid(参数) ... end sub 在主窗体调用 form2.setgrid(传入你的参数)

listview-c#窗体中的ListView,我用smallicon,我想改变图标到文字的距离怎么改?

问题描述 c#窗体中的ListView,我用smallicon,我想改变图标到文字的距离怎么改? 谢谢大家 解决方案 这个需要重绘,建议你不要用listview,而用tablelayoutpanel + usercontrol来实现.在usercontrol内组合label和picturebox

c++ cli-寻求大神指点,如何将MFC对话框作为.net 中 winForm的父窗体

问题描述 寻求大神指点,如何将MFC对话框作为.net 中 winForm的父窗体 问题是这样的: 在建立的MFC对话框工程中,使用.NET与MFC互操作,在一个MFC的对话框CMFC_C_CLIDemoDlg 中显示一个.net的form窗体frm,由于需要显示成非模态对话框样式的Form,所以使用了frm->Show();的方法. 但是这样创建的窗体frm在失去焦点后,窗体就消失了(不显示在对话框的上层),经过测试发现,是因为在frm->Show()显示窗体时,没有指定对话框为它的父窗体.

教你在Delphi程序中使用动态图标

在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标.在Delphi中使用动态图标的步骤如下: 一.图标的获取 要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄.该图标通过文件关联由系统注册表决定,并且在

在Delphi中使用动态图标

在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标.在Delphi中使用动态图标的步骤如下: 一.图标的获取 要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄.该图标通过文件关联由系统注册表决定,并且在