【摘要】:打开本章第7节建立的“Tp”工程,继续演示CWinApp类的开发应用。1)修改启动函数CWinApp派生类的构造函数代码。m_pszAppName成员变量有三种途径赋值,首先在CWinApp构造函数中获得字符串。在App派生类以外,调用CWinApp类成员函数的方法有两种。CWinApp类的成员函数LoadIcon和LoadStandardIcon,实际上是封装了API函数LoadIcon的结果。和加载图标的两个函数一样,CWinApp类的成员函数LoadCursor和LoadStandardCursor,分别用于加载程序光标和系统光标资源,它们封装的也是同一个API函数LoadCursor。
打开本章第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)编译并运行,测试代码。(www.chuimin.cn)
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函数。
相关推荐