友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第28章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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应用一样,框架应用程序仍然具有一个WinMain 

函数。但是,在由AppWizard生成的应用程序框架中,我们却找不到 

对WinMain函数的声明或定义。在MFC应用程序中,WinMain函数是由 

类库提供的,它在应用程序启动时被调用。WinMain函数执行如注册 

窗口类之类的标准服务。接着,它调用应用程序对象的成员函数来初 

始化并且运行应用程序。通过重载WinMain函数所调用的类CWinApp的 

成员函数可以自定义WinMain函数。  



WinMain函数通过调用应用程序对象的InitApplication和 

InitInstance成员函数来初始化应用程序,通过调用Run成员函数运 

行应用程序的消息循环,最后在程序结束时调用程序程序的 

ExitInstance成员函数。其中Run函数一般由MFC提供,而 

InitApplication、InitInstance和ExitInstance一般需要程序员创 

建或进行重载。  



  l 注意:  



  l 由于在Win32环境下,每一个应用程序的实例都是独立的,它们有 

   着 自己的虚拟地址空间,因此,在目前版本的MFC中,成员函数 

   CWinApp::InitApplication已被废弃,原来在InitApplication中 

   进行的初始化操作应该移到InitInstance中进行。  



由AppWizard生成的基于对话框的框架应用程序提供了对 

InitInstance的默认重载,也正是在该成员函数中提供了基于对话框 


…………………………………………………………Page 174……………………………………………………………

的应用程序的特点。在MFC中,无论是基于对话框的应用程序,还是 

基于文档/视结构的应用程序,它们的应用程序对象都是从CWinApp派 

生而来的,它们之间的功能的巨大差异,往往就是通过对类CWinApp 

的成员函数进行不同的重载来体现的。  



在每一个同一应用程序的实例被启动时,WinMain函数调用一次 

InitInstance成员函数。原有的InitApplication不再有意义,每一 

个应用程序的实例都被认为是独立的,对应用程序的初始化同对实例 

的初始化没有本质区别。对于InitInstance成员函数,我们这时只需 

知道它在当应用程序进行初始化的时候由WinMain函数调用。关于基 

于对话框的应用程序的InitInstance成员函数的典型实现,我们将在 

本章后面的内容中专门讲述。  



类CDialogDemoApp的实现包含在文件DialogDemo。cpp中,其清单如 

下:  



// DialogDemo。cpp : 为应用程序定义类的行为  



//  



#include 〃stdafx。h〃  



#include 〃DialogDemo。h〃  



#include 〃DialogDemoDlg。h〃  



#ifde
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!