您身边的软件定制专家--9年开发经验为您护航

18678812288
0531-88887250

VC++自定义对话框程序界面图标以及 *.exe 桌面图标

文章作者:济南软件开发 时间:2016年09月27日

  济南软件开发在使用VC++开发自己的应用程序时,VC总是自动为我们生成一个默认的图标,读者是否想过为自己开发的程序自定义一个具有个性化的图标呢?若是的话,想必以下这篇文章会对读者有所益处。下面本人就为大家介绍一下如何利用VC++为自己的应用程序自定义自己的个性化图标!

  选择好自己想要使用的图片,然后将其转换成位图格式(*.bmp),一张16*16的位图,一张32*32的位图,可以使用画图工具来的拉伸和缩放功能(按比例进行计算),也可以借助其他更好用的图片处理软件。

  在工程的 res 文件夹里新建一个文件夹“MyPicture”,然后将刚才转换好的两张位图放到这个文件夹里(注意:一定要把位图放在工程里指定的位置里面,否之以后若需要用到是会出现找不到位图资源的错误。)

  用VC打开工程,然后切换到资源视图

  右击“ *.rc”—添加资源—选择“Bitmap”—选择“导入”—然后导入刚才转换后的两张位图,此时会出现Bitmap文件夹,里面就有我们需要的两张刚才转换的位图资源(IDB_BITMAP1, IDB_BITMAP2)。

  右击“Icon”—插入icon—此时出现“IDI-ICON1”—双击“IDI-ICON1”—在右边的窗口能看到系统已经创建好了两张“BMP”位图(一张是“16*16,4位,BMP”,一张是“32*32,4位,BMP”),此时我们可以直接编辑这两张位图成为我们需要的 ICON 图标,不过最好自己再新建两张 24 位的BMP位图(也可以用系统给我们生成的那两张图片)

  。

  右击下边的空白栏—新建图像类型—分别选择“16*16,24位”和“32*32,24位”。这样就新建了两张 BMP位图。

  双击“IDB_BITMAP1”—选自“矩形选择工具”—然后将整张“IDB_BITMAP1”的位图选择—然后复制(ctrl+c)

  双击“IDI_ICON1”—选择“16*16,24位,BMP”—然后在右边的图片窗口“Ctrl+v”,

  注意:最好先将自己的整张BMP图片的背景用“填充工具”或“喷枪工具”涂白后再执行“Ctrl+v”,否则图标的背景无法和桌面的背景一样。

  按照上面的步骤将“32*32,24位,BMP”的位图资源也绘制好。

  (以上是图标的准备工作,下面才真正开始替换程序界面的图标和桌面上的*.exe 文件的图标)

  第一种方法:(相对比较简单,也比较直接)

  删除“资源视图”的“IDR_MAINFRAME”—然后将“IDI_ICON1”的“ID”更改为“IDR_MAINFRAME”

  重新编译运行,此时程序界面显示的大图标和小图标,以及在桌面上的 *.exe 文件的图标。

  第二种方法:(更改程序的代码,不更改原来工程的资源,即不需要删除“资源视图”里原来的图标资源)

  MFC程序中的对话框程序默认加载程序界面图标以及*.exe 桌面图标的方式其实很简单,在没有其他程序图标的情况下,在框架类例如“CSonyPeaceDlg”的头文件 “SonyPeaceDlg.h”有这样一个成员变量

  protected:

  HICON m_hIcon;

  这个成员变量是用来加载 程序界面图标以及 *.exe 桌面图标 的。

  然后在 “SonyPeaceDlg.cpp”的OnInitDialog() 函数里面有这样两句加载图标的语句

  SetIcon(m_hIcon, TRUE);        //设置大图标

  SetIcon(m_hIcon, FALSE);           //设置小图标

  其中第一条语句是用来设置桌面的  *.exe 桌面图标 ,第二条语句是用来设置程序界面左上角以及任务栏的程序图标。因此,若是想更改程序的界面图标以及桌面 *.exe 的图标的话,可以在OnInitDialog() 函数里面更改。方法:

  在“SonyPeaceDlg.h”文件里面定义一个成员变量,如

  protected:

  HICON m_myhIcon;

  然后将“SonyPeaceDlg.cpp”的OnInitDialog() 函数 里面原来两条设置程序图标的语句注释掉,并改为如下语句:

  //SetIcon(m_hIcon, TRUE);          //设置大图标

  //SetIcon(m_hIcon, FALSE);         //设置小图标

  m_myhIcon = LoadIcon(theApp.m_hInstance, MAKEINTRESOURCE(IDI_ICON1));

  SetIcon(m_ myhIcon, TRUE);

  SetIcon(m_ myhIcon, FALSE);

  此时重新编译程序并运行,就能看到程序运行界面的图标已经被更改为我们自己想要的图标了,但是此时只是改变了程序运行时的界面图标,至于桌面上的那个*.exe 程序的图标是否已经更改了呢?我们可以到项目工程里相应的目录看一下,我们会发现此时的 *.exe 程序的图标还没有改变。为什么会这样呢?

  我们可以先在“查找和替换”搜索栏里查找“IDR_MAINFRAME”选项,直到找到“SonyPeace.rc”文件下面的“IDR_MAINFRAME”。

  我们可以在上面看到有三个图标,一个是系统默认的图标“IDR_MAINFRAME”,另外两个是我自己加载到工程里的图标“IDI_ICON1”和“IDI_ICON2”,其中我们刚才加载的是“IDI_ICON1” 。再看看上面有一段绿色的注释,大概意思是:“ID号最小的那个图标将会确保成为应用程序的图标。”

  我再通过“查找和替换”栏切换到Resource.h文件下面,可以看到其中有这样的内容:

  我们可以找到 刚才所说的三个图标资源的ID 号:“IDR_MAINFRAME”的ID为154, “IDI_ICON1”和“IDI_ICON2”的ID号分别为158和155,这两个图标的ID都比系统默认提供的图标的ID大。我们可以试着把它们的ID彼此对调一下,如,把最小的ID(154)赋给“IDI_ICON1”,如下图:

  然后再重新编译程序,然后再到工程目录的*.exe文件夹下面,此时,我们就可以惊奇的发现,我们终于实现了把 *.exe的桌面图标更改成我们自定义的图标了,同时,程序桌面的图标也是我们自己自定义的图标。

  若还不能确定没问题,我们再试一下,把最小的ID(154)赋给“IDI_ICON2”,

  再重新编译运行,此时程序桌面的图标变成了另一个我们自己自定义的图标。

  至此,我们就已经实现了程序界面图标以及*.exe 桌面图标的更改。

  在此,我在介绍另外一种方法,也是用代码在加载自定义图标。

  首先,通过类向导,我们给程序添加消息“WM_CREATE”及其映射函数“OnCreate()”然后在 “return 0;”语句之前加上以下代码:

  m_myhIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

  SetIcon(m_myhIcon, true);

  SetIcon(m_myhIcon, false);

  当然,也需要在先“SonyPeaceDlg.h”文件定义一个成员变量:

  protected:

  HICON m_myhIcon;

  同时,也需要象第二种方法一样将自定义图标的ID号更改为最小,然后重新编译运行程序,也能够达到我们想要的效果。


想要了解更多详情欢迎来电咨询18678812288
登陆网址:www.jnydkj.cn。
联系人:王经理。