📄 09.3.1 加载图标资源.txt
字号:
9.3.1 加载图标资源
本例使用三幅图标,对应的文件在随书附带光在上本例所在目录下的 res目录下 (该目录主要是用
来放置当前工程的资源文件的),文件名分别为: News.ico, User.ico和 Zip File.ico。读者可以
把它们直接复制到自己的Style工程的res日录下。然后,在VC++开发窗口中选择
【Insert\Resource...】菜单命令,打开插入资源对话框,单击该对话框上的 <Import...】按钮,
在弹出的导入资源对话框 (如图9.11所示〉中,找到本例的res目录,并选中上述三个图标文件,单
击【Import】按钮导入新的图标资源。
这样, Style程序中就有了三幅新图标,其 ID如图 9.12所示,分别为: IDCICON1,
IDI ICON2和IDI ICON3 o
然后,我们在 Style程序的 CMainFrame类中,定义一个图标句柄数组成员变量,用来存放这三幅图
标的旬柄。该数组成员变量的定义代码如下所示:
private:
,
HICON m_hicons[3];
接下来,在CMainFrame类的OnCreate函数中利用 LoadIcon函数加载这三个图标,添加的代码如例9-8
所示代码中加灰显示的部分。
例9-8
int CMainFrame : :OnCreate(LPCREATESTRUCT lpCreateStruct) {
// TODO : Delete these three lines if you don ' t want the toolbar to
/ / be dockable
m_wndToolBar . EnableDocking(CBRS_ALIGN_ANY) ;
Enab leDocking(CBRS_ALIGN_ANY) ;
DockControlBar(&m_wndToolBar) ;
SetClassLong (m_ hWnd, GCL_ HICON , (LONG)Loadicon(NULL , IDI_ ERROR)) ;
m_hicons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
.
,
m_hIcons [1] =LoadIcon(theApp.m_hInstance, MAKEINTRESOURCE(IDI_ICON2));
) ) ., m_h工co口s[2]=Load工con(AfxGetApp(}->m_hInstance,MAKEINTRESOURCE(ID工一工CON3
return 0 ;
这段新添的代码首先加载第一幅图标ClDCICONl)。因为在这之前我们使用的都是系统标准图标,所
以将Loadlcon函数的第一个参数都设置为NULL.但这里需要使用自定义的图标,那么该函数的第一个
参数应该设置为应用程序的当前实例句柄。前面已经讲述过, AfxGetInstanceHandle函数可以获取
应用程序当前的实例句柄。另外. Loadlcon函数的第二个参数需要的是图标的名称,或者是图标资
源标识符字符串,而我们只有图标资源的ID.这里必须通过MAKEINTRESOURCE宏将资源D转换为相应的
资源标识符字符串。这个宏的定义代码如下所示:
LPTSTR MAKEINTRESOURCE( WORD wInteger };
可以看到,这个宏的返回值是一个字符串类型,也就是字符指针类型。
接下来,加载第二幅图标,本例中利用另一种方法来获得应用程序当前的实例句柄。我们己经知道,
在 MFC SDI应用程序中,有一个表示应用程序本身的类,本例中就是 CStyleApp.它派生于CWinApp
类。该类有一个数据成员: m_hlnstance.标识了应用程序当前的实例,也就是说,如果我们能获取
到应用程序的 CWinApp对象,就可以利用这个对象来调用它的 m_hlnstance数据成员,从而得到应
用程序当前的实例句柄。根据前面的知识,我们知道在 CStyleApp的源文件中已经定义了一个
CStyleApp类型的全局变量:
theAppo这样,我们就可以利用这个全局对象来调用其内部的数据成员。但是,在
文件中要想调用另一个源文件中定义的全局变量,必须在调用这个变量之前声明这个变量是在外部
定义的,声明代码如下所示,读者可以把它放到CMainFrame类的OnCreate函数定义之前:
extern CStyleApp theApp;
回注意:该行代码不是在定义一个性,而是在声明一个性,声明这个变
量是在外部的一个源文件中定义的。
接着,加载第三幅图标,这里我们再换一种方式来获取应用程序当前的实例句辆。 MFC提供了一个
全局函数: AfxGetApp.可以获得当前向用程序对象的指针。因为这个函数是全局函数,所以在应用
程序的任意地方都可以调用它。在本程序中,利用AfxGetApp函数的返回值来访问应用程序的
m_hInstance数据成员。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -