MFC加载图标和位图,有2种方式,一种是从工程的资源中加载,一种是从文件加载。
先说图标的,图标格式为.ico,也就是我们常说的ICON图片。
我们直观的希望是加载ico使用LoadIcon()函数,加载bitmap图片使用LoadBitmap函数,事实上,的确可以这样。
1、加载图标
LoadIcon函数要加载位图,要使用CWinApp的成员函数LoadIcon才行。当你查看MSDN的时候,会发现,LoadIcon可以是CWinApp的Class member函数,也可以是windows api函数。说实话,windows api函数我不知道怎么使用,呵呵,大家可以自己去验证下能不能加载。这里既然说了是CWinApp函数,我们的MFC程序都有一个全局的变量,theApp。这个变量就是CWinApp类的对象,只需要使用theApp.LoadIcon()就可以了。当然,也可以使用AfxGetApp()获得CWinApp指针,比如AfxGetApp()->LoadIcon();
函数原型:
HICON LoadIcon( LPCTSTR lpszResourceName ) const; //这一种是从硬盘上加载ICON,传入的参数是文件路径,比如“F:\\123.ico”;
HICON LoadIcon( UINT nIDResource ) const; //这种是从工程资源中加载ICON,传入参数是资源ID,比如IDC_ICON1.
简单举例:
(1)从硬盘加载
HICON hIcon = NULL;
hIcon = theApp.LoadIcon("F:\\123.ico");
或者
hIcon = AfxGetApp()->LoadIcon("F:\\123.ico");
(2)从资源加载
HICON hIcon = NULL;
hIcon = AfxGetApp()->LoadIcon(IDC_ICON1);
是不是很简单,这样就完成了图标的加载了。
2、位图的加载。
位图的加载也很简单,我们使用CBItmap的成员函数LoadBitMap();
函数声明:
BOOL LoadBitmap( LPCTSTR lpszResourceName ); //从硬盘加载位图
BOOL LoadBitmap( UINT nIDResource ); //从资源加载位图
举例:
CBitmap bitmap;
bitmap.LoadBitmap("F:\\a.bmp");
或者
bitmap.LoadBitmap(IDB_BITMA1);
3、通用加载图片方式
这种方式,使用LoadImage来加载,这种方式可以去试试。
举例:
HBITMP hBitmap=(HBITMAP)::LoadImage(NULL,pszFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//
pszFileName
是文件路径。
LR_LOADFROMFILE表示从文件中加载。
或者
HICON hIcon = (HICON)::LoadImage(NULL,pszFileName,IMAGE_ICON,0,0,LP_LOADFROMFILE);