按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
…………………………………………………………Page 169……………………………………………………………
文件名为 StdAfx。obj。
Resource。h
定义新资源 ID 的标准头文件。Microsoft Developer Studio 读取和更新该文件。
/////////////////////////////////////////////////////////////////////////////
其它注意事项:
AppWizard 使用 〃TODO:〃 来指出需要添加或定制源代码的地方。
如果你的应用程序使用了 MFC 的共享动态链接库,并且你的应用程序使用了与操作系统
当前语言不同的语言,那么你需要将相应的本地化资源文件 MFC40xxx。DLL 从 Microsoft
Visual C++ CD…ROM 上复制到 system 或 system32 目录下,并将其改名为 MFCLOC。DLL。
(〃xxx〃代表指定语言的缩写,如 MFC40DEU。DLL 包括了已被翻译为德文的资源。)如果你
没有进行这个步骤,应用程序的一些用户界面元素仍将保持为操作系统的语言。
/////////////////////////////////////////////////////////////////////////////
下面我们从头文件StdAfx。h入手,来分析该应用程序。头文件
StdAfx。h的列表清单如下:
// stdafx。h : 本包含文件包含了标准系统包含文件,以及经常使用的工程特定的包含
// 文件,在很多情况下,我们并不需要修改这些文件。
//
#if !defined(AFX_STDAFX_H__7ABABF8C_0C8C_11D2_BC21_0000B4810A31__INCLUDED_)
#define AFX_STDAFX_H__7ABABF8C_0C8C_11D2_BC21_0000B4810A31__INCLUDED_
#if _MSC_VER 》= 1000
#pragma once
#endif // _MSC_VER 》= 1000
#define VC_EXTRALEAN // 从 Windows 头文件中排除很少用到的那一部分
#include // MFC 核心和标准部件
#include // MFC 扩展
#include // MFC OLE 自动化类
…………………………………………………………Page 170……………………………………………………………
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include // MFC 对 Windows 公用控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio 将在上一行之前最接近的地方添加附加的声明
#endif // !defined(AFX_STDAFX_H__7ABABF8C_0C8C_11D2_BC21_0000B4810A31__INCLUDED_)
与头文件相对应的实现文件为StdAfx。cpp文件,该文件只有一行代码,如下面的清单所示:
// stdafx。cpp : 包含标准包含文件的源文件
// DialogDemo。pch 为预编译头文件
// stdafx。obj 中包含了预编译类型信息
#include 〃stdafx。h〃
StdAfx。h文件是Visual C++工程的预编译头文件,将一些常用的并且
很少需要修改的头文件放入StdAfx。h中可以有效的提高Visual C++的
编译速度。
在StdAfx。h头文件中定义的标识符VC_EXTRALEAN将从Windows包含文
件中排除了一些不常用的头文件,从而提高应用程序的编译速度,但
是,如果应用程序中需要使用在被排除的这些头文件中声明的函数,
必须额外的添加这些对这些头文件的包含,否则将会导致编译出错。
对其它包含头文件的说明请参见StdAfx。h头文件清单中的注释。
在头文件Resource。h中包含了对程序和资源中所用到的常量的定义,
其清单如下:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成包含文件。
// 由 DIALOGDEMO。RC 使用
//
#define IDR_MAINFRAME 128
#define IDM_ABOUTBOX 0x0010
…………………………………………………………Page 171……………………………………………………………
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_DIALOGDEMO_DIALOG 102
// 新对象的下一个默认值
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_MAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
下面我们再来分析一下头文件DialogDemo。h:
// DialogDemo。h : 应用程序 DIALOGDEMO 的主要头文件
//
#if !defined(AFX_DIALOGDEMO_H__7ABABF88_0C8C_11D2_BC21_0000B4810A31__INCLUDED_)
#define AFX_DIALOGDEMO_H__7ABABF88_0C8C_11D2_BC21_0000B4810A31__INCLUDED_
#if _MSC_VER 》= 1000
#pragma once
#endif // _MSC_VER 》= 1000
#ifndef __AFXWIN_H__
#error include 'stdafx。h' before including this file for PCH
#endif
#include 〃resource。h〃 // 主要符号
/////////////////////////////////////////////////////////////////////////////
…………………………………………………………Page 172……………………………………………………………
// CDialogDemoApp:
// 在 DialogDemo。cpp 中包括了该类的实现
//
class CDialogDemoApp : public CWinApp
{
public:
CDialogDemoApp();
// 重载
// ClassWizard 生成的虚函数重载
//{{AFX_VIRTUAL(CDialogDemoApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// 实现
//{{AFX_MSG(CDialogDemoApp)
// 注意 ClassWizard 将在这里添加或删除成员函数
// 不要编辑你在这里所看到的这些生成代码块 !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio 将在紧接着上一行之前的地方插入附加的声明。
#endif // !defined
(AFX_DIALOGDEMO_H__7ABABF88_0C8C_11D2_BC21_0000B4810A31__INCLUDED_)
在头文件DialogDemo。h中定义了应用程序类CDialogDemoApp。在MFC
…………………………………………………………Page 173……………………………………………………………
中,应用程序类封装了一个Windows应用程序的初始化、运行和终
止。每一个MFC应用程序都必须包括一个从CWinApp派生的应用程序
类,在应用程序DialogDemo中,这个类就是CDialogDemoApp。这个对
象在窗口被创建之前进行构造。类CWinApp从类CWinThread派生,它
代表了应用程序的主执行线程,正如我们在前面的章节中所讲述的那
样,一个应用程序可以有多个执行线程。在MFC的最近看到版本中,
已为类CWinThread的成员函数InitInstance、Run、ExitInstance和
OnIdle提供了默认的实现。由于我们在讨论CWinApp时更侧重于它作
为应用程序对象所扮演的角色,而不是作为主线程,因此,我们在讨
论前面提到的四个成员函数的时候,可以把它们想象为在类CWinApp
定义的成员函数,即立足于应用程序对象的角度来看待和分析它们的
行为,而不是立足于一个单独的线程的角度。
应用程序类构成了应用程序的主执行线程。使用Win32 API函数可以
创建新的执行线程。这些线程仍可以使用MFC库,详细的信息请参考
本书关于进程和线程的有关章节。
同其它的任何Windows应用一样,框架应用程序仍然具有