我们发现向导生成的MFC程序生成的桌面上(资源管理器上)的.exe文件和运行时标题栏上(最小化时任务栏上)的图标都是一样,实际上我们可以为它们配置不同的图标。实际上vc默认的那个MFC的图标(本案例中的Test.ico)是一个ID号对应了2个图标,一个16×16的一个32×32的。一个16×16的小图标是用于标题栏和最小化时任务栏的。另一个32×32的大图标则是用于桌面和资源管理器的。故我们可以为应用程序再添加一个与默认图标大小不同的.ico文件.
以下为MFC向导生成的窗口(标题已改)
以下为生成的.EXE文件在资源管理器中的缩略图:
以下为项目的资源res文件夹:
一.个性化图标
(1)为应用实例添加光标资源
右击解决方案资源管理器中的资源文件-〉添加-〉资源-〉选择Icon资源类型-〉若选“导入”则可以从导入硬盘中已有的ICON文件;若选“新建” 则打开资源编辑器,自己绘制图标。这里我们选择导入我们收藏的ICON文件,一个黄纸飞机IDI_ICON1和一个红纸飞机IDI_ICON2。
我们在这里先将这两个图标通过CDC的DrawIcon函数在窗口中绘制出来。
void CEX041View::OnDraw(CDC* pDC)
{
// TODO: 在此处为本机数据添加绘制代码
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
pDC->DrawIcon(0,0,hIcon);
DestroyIcon(hIcon);
hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
pDC->DrawIcon(50,0,hIcon);
DestroyIcon(hIcon);
}
(2)为应用程序实例加载光标资源,并为主窗口设置指定的图标。
使用CWinApp::LoadIcon和CWnd::SetIcon加载图标。
1CWinApp::LoadIcon
HICON LoadIcon( UINT nIDResource ) const;
参数nIDResource为图标资源的ID。
2CWnd::SetIcon
HICON SetIcon( HICON hIcon, BOOL bBigIcon );
参数hIcon为以前图标的句柄。
参数bBigIcon,如果为TRUE,则指定了32×32像素的图标;如果为FALSE,则指定了16×16像素的图标。 在BOOL CTestApp::InitInstance()中添加代码。
<1> m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON1),FALSE);// 设置窗口的小图标
m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON2),TRUE); //设置窗口的大图标
结果标题栏显示为IDI_ICON1,但是资源管理器中的.EXE文件依然为默认MFC图标。
<2>m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON1),TRUE);// 设置窗口的大图标
m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON2),FALSE); //设置窗口的小图标
结果标题栏显示为IDI_ICON2,但是资源管理器中的.EXE文件依然为默认MFC图标。
<1><2>说明当2个BOOL bBigIcon的值不同时,选择BOOL bBigIcon的值为FALSE的图标作为窗口标题栏图标。
<3> m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON2),TRUE);//设置窗口的大图标
m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON1),TRUE);// 设置窗口的大图标
结果标题栏显示为IDI_ICON1,但是资源管理器中的.EXE文件依然为默认MFC图标。
<4>m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON1),TRUE);//设置窗口的大图标
m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON2),TRUE);// 设置窗口的大图标
结果标题栏显示为IDI_ICON2,但是资源管理器中的.EXE文件依然为默认MFC图标。
3><4>说明当2个BOOL bBigIcon的值同为TRUE时时,选择后一个作为窗口标题栏图标。
<5>m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON1),FALSE);//设置窗口的小图标
m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON2),FALSE);// 设置窗口的小图标
结果标题栏显示为IDI_ICON2,但是资源管理器中的.EXE文件依然为默认MFC图标。
<6>m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON2),FALSE);// 设置窗口的小图标
m_pMainWnd->SetIcon ( LoadIcon( IDI_ICON1),FALSE);//设置窗口的小图标
结果标题栏显示为IDI_ICON1,但是资源管理器中的.EXE文件依然为默认MFC图标。
以下为ICON1作为窗口图标效果:
以下为ICON2作为窗口图标效果:
<5><6>说明当2个BOOL bBigIcon的值同为FALSE时,选择后一个作为窗口标题栏图标。
(3)用替代法为资源管理器中的.EXE文件更改图标。
我们可以将一个图标Sina.ICO移动到...\Visual Studio 2005\Projects\EX041\EX041\res,然后将原来的MFC默认图标EX041.ico重命名为Test1.ico,将Sina.ICO重命名为Test.ico,则资源管理器中的.EXE文件即设置为我们所要的图标。
以下为项目的资源res文件夹:
以下为生成的.EXE文件在资源管理器中的缩略图: