可以使用两种方法导入图标文件,一种是从项目资源中导入,另一种是从磁盘中导入。
1 从项目资源中导入图标
使用该方法导入图标文件时,必须先将图标文件导入到项目资源中。
1.1 图标文件资源的导入
选择“资源视图”选项卡,之后选择资源视图树型控件的“XXX->XXX.rc->Icon”,其中XXX表示项目名称,如图1所示。
图1 选择Icon资源文件夹
接下来在右键菜单中选择“添加资源”,之后在弹出的“添加资源”对话框中的“资源类型”中选择“Icon”,之后选择“导入”,如图2所示。
图2 导入图标文件
在弹出的“导入图标”对话框中,将文件类型选择为“图标文件(*.ico)”,之后选择要导入的图标,最后点击“打开”按键,导入该图标文件,如图3所示。此时,在“资源视图”的“Icon”文件夹中,就会出现新导入的图标文件。
1.2 通过CWinApp::LoadIcon()函数获取图标文件句柄
该函数的格式为
HICON LoadIcon(UINT nIDResource) const;
其中,参数nIDResource
是项目图标文件资源的
ID
;返回值是该图标文件资源的句柄。
HICON hIcon = AfxGetApp()->LoadIconW(IDI_ICON1);
图3 导入选中的图标文件
其中,AfxGetApp()函数是MFC提供的全局函数,该函数的作用是返回指向应用程序对象的指针,即CWinApp类的指针。CWinApp类的指针调用该类的LoadIcon()函数导入图标文件,IDI_ICON1是在“1.1图标文件资源的导入”中导入的图标文件,该图标的句柄保存在LoadIcon()函数的返回值,即hIcon中。
1.2 通过LoadImage()函数获取图标文件句柄
LoadImage()是Windows API函数,通过该函数也可以获取项目中图标资源的句柄。LoadImage()函数的格式是
HANDLE LoadImage(
HINSTANCE hinst,
LPCTSTR lpszName,
UINT uType,
int cxDesired,
int cyDesired,
UINT fuLoad
);
其中,参数hinst表示包含该图像资源的模块的句柄;lpszName表示图像的名称;uType指定了图像的类型,通过该参数可以指定导入的图像类型是图标文件;cxDesired和cyDesired指定了要导入图标资源的宽度和高度;fuLoad是导入图像时的标志。LoadImage()函数的返回值是导入图像的句柄。通过以下代码可以获取图标资源的句柄:
HICON hIcon1 = (HICON)::LoadImage(
AfxGetInstanceHandle()
, MAKEINTRESOURCE(IDI_ICON1)
, IMAGE_ICON
, 0
, 0
, LR_DEFAULTCOLOR);
其中,AfxGetInstanceHandle()是MFC的全局函数,该函数的作用是返回标识当前应用程序实例的句柄,即HINSTANCE;MAKEINTRESOURCE()宏的作用是将一个整型资源ID转换为LPTSTR数据类型的ID,IDI_ICON1是在“1.1图标文件资源的导入”中导入的图标文件ID;IMAGE_ICON指定了导入的图像类型是图标资源;第4和第5个参数均为0,表示导入的图标文件使用原始的宽度和高度;LR_DEFAULTCOLOR表示图标文件使用默认的颜色。导入的图标文件句柄保存在hIcon1中。
2 从磁盘中导入图标文件
在“1.2通过LoadImage()函数获取图标文件句柄”中使用了Windows API函数LoadImage()从项目的图标文件资源中导入了图标文件句柄。通过该函数也可以将磁盘中的图标文件文件导入到程序中。此时,需要将LoadImage()函数的第一个参数设置为NULL,第二个参数指定图标文件文件的绝对路径,最后一个参数设置为LR_LOADFROMFILE即可。
HICON hIcon2 = (HICON)::LoadImage(
NULL
, _T("C:\\bing.ico")
, IMAGE_ICON
, 0
, 0
, LR_LOADFROMFILE
);
以上代码的作用是将C
盘根目录下的
bing.ico
图标文件文件导入到程序中,并将其句柄保存到变量
hIcon2
中。