第8节  CWinApp类的应用

更新于 2026年10月10日 版权声明
第8节 CWinApp类的应用

打开本章第7节建立的“Tp”工程,继续演示CWinApp类的开发应用。

1)修改启动函数CWinApp派生类的构造函数代码。

图示

2)编译并运行,测试代码。

m_pszAppName成员变量有三种途径赋值,首先在CWinApp构造函数中获得字符串。如果构造函数没有赋值,则通过字符串表中的AFX_IDS_APP_TITLE获取。如果字符串表中还没有赋值,则最后m_pszAppName根据进程的可执行文件的文件名进行赋值。

3)修改InitInstance函数的代码,测试CWinApp::SetDialogBkColor函数。

图示

4)测试图标加载函数,如图4-33所示。

在资源视图中,通过菜单命令插入或者导入一个图标资源,默认ID为IDI_ICON1。

图示

图4-33 添加图标资源

5)修改主对话框类的初始化函数代码。

图示

6)编译并运行,测试代码。窗口图标以及在任务栏的图标,都已经更改为新的图标。

在App派生类以外,调用CWinApp类成员函数的方法有两种。第一种是使用全局变量theApp调用,第二种是使用MFC全局函数AfxGetApp(),这个函数的返回值其实就是全局变量theApp的地址。

7)使用LoadStandardIcon加载系统图标。

查看MSDN关于CWinApp::LoadStandardIcon函数的说明,在“WINDOWS.H”头文件中定义了5个系统图标ID。

#define IDI_APPLICATION MAKEINTRESOURCE(32512)

#define IDI_HAND MAKEINTRESOURCE(32513)

#define IDI_QUESTION MAKEINTRESOURCE(32514)

#define IDI_EXCLAMATION MAKEINTRESOURCE(32515

#define IDI_ASTERISK MAKEINTRESOURCE(32516)

#if(WINVER>=0x0400)

#defineIDI_WINLOGO MAKEINTRESOURCE(32517)

#endif/*WINVER>=0x0400*/

8)重新修改对话框初始化函数,测试加载系统图标。

图示

9)编译并运行,测试代码。(https://www.daowen.com)

CWinApp类的成员函数LoadIcon和LoadStandardIcon,实际上是封装了API函数LoadIcon的结果。查看MSDN关于LoadIcon函数的说明。

图示

其中第一个参数hInstance如果代入NULL,则该函数是从系统中加载图标;反之如果代入应用程序实例,则该函数从程序资源中加载图标。在MFC中调用应用程序实例,有以下几种方法。

HINSTANCE h=AfxGetInstanceHandle();

HINSTANCE h=AfxGetApp()->m_hInstance;

HINSTANCE h=theApp.m_hInstance;

10)修改代码,测试通过API加载图标资源。

图示

11)修改代码,测试通过API加载系统图标。

图示

12)通过断点进入LoadStandardIcon函数可以看到它的函数源代码。

图示

MAKEINTRESOURCE实际上就是强制类型转换,将整数类型强制转换为字符串指针类型。在源代码窗口中选中MAKEINTRESOURCE,然后按<F12>键可以查看到它的宏定义。

#define MAKEINTRESOURCE(i)(LPSTR)((DWORD)((WORD)(i)))

13)测试光标加载函数。

和加载图标的两个函数一样,CWinApp类的成员函数LoadCursor和LoadStandardCursor,分别用于加载程序光标和系统光标资源,它们封装的也是同一个API函数LoadCursor。

图示

其中第一个参数hInstance如果代入NULL,则该函数是从系统中加载图标;反之如果代入应用程序实例,则该函数从程序资源中加载图标。MSDN关于LoadStandardCursor函数的说明指出,在“WINDOWS.H”头文件中定义了以下系统光标ID。

图示

14)为对话框类添加一个WM_SETCURSOR的消息映射函数,如图4-34所示。

图示

图4-34 添加WM_SETCURSOR消息映射函数

15)修改该消息映射函数的代码。

图示

16)编译并运行,测试代码。

当鼠标光标停留在不同的控件上时,显示出不同的光标形状。在程序内导入或者自绘一个光标,就要使用CWinApp::LoadCursor函数。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)