第09章 MFC的文件处理机制
MFC中的文件读写操作

由于要写个游戏工具方便编程,要用到文件类的操作,看到这篇文章不错,特转载计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的。
面向存储的文件技术什么是文件?计算机中,一篇文章、一幅图片、一个程序等都是以文件的形式存储在磁盘上的,每个文件都有一个文件名。
计算机就是对文件按名存取的。
文件名的格式如下:主文件名.扩展名。
为什么要在程序中使用文件?通常,程序中的数据在程序运行结束之后,就会从内存中清除,再次运行程序时不会自动出现。
在编制程序的过程中不可避免的会遇到将某些数据永久保存的问题,当程序关闭后,依然可以使用这些数据,这时就需要进行文件操作。
文件类型Visual C++处理的文件通常分为两种:文本文件:只可被任意文本编辑器读取ASCII文本。
二进制文件:指对包含任意格式或无格式数据的文件的统称。
这里只介绍文本文件的读写,INI文件也属于文本文件的范畴,且INI文件的结构和用途与普通的文本文件不同,所以会单独介绍。
第一部分:文本文件文本文件的读写认识CFile类;认识文本文件;能够正确灵活应用文本文件存取信息;避免文本文件读写的常见误区。
CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件、内存文件和socket文件。
客户操作记录实例功能预览及关键知识点许多系统,出于安全或其他原因,常常要求随时对键盘进行监控,利用Hook(钩子)技术编写的应用程序能够很好地达到这个目的。
本软件就制作了一个客户操作记录软件,即在软件运行过程中,用户在键盘上的按键操作会被记录下来,这样对维护软件的正常运行非常有利。
只要启动客户操作记录软件后,不管输入焦点是否在本软件上,按键都会被记录下来。
我们需要的是键盘的系统监控,只要本软件在运行,无论当前计算机在做什么,都能监测到用户按键的行为并做出反应,这就要用到Hook技术。
mfc的原理、机制与开发实例

mfc的原理、机制与开发实例MFC(Microsoft Foundation Class)是微软公司开发的一套面向对象的应用程序框架,用于简化Windows操作系统上的图形用户界面(GUI)应用程序的开发。
MFC提供了一系列的类和函数,使开发者能够更加方便地创建、管理和操作窗口、对话框、控件等GUI元素。
MFC的原理和机制主要基于C++语言和Windows操作系统的API (Application Programming Interface)。
MFC的核心类是CObject类,所有的MFC类都是从CObject类派生而来的。
MFC使用了一种称为消息映射(Message Mapping)的机制来处理用户界面的事件和消息。
当用户进行操作时,例如点击按钮、输入文本等,Windows操作系统会生成相应的消息,并将其发送给应用程序。
MFC通过消息映射将这些消息与相应的处理函数关联起来,从而实现对用户操作的响应。
MFC的开发实例可以通过一个简单的计算器程序来说明。
首先,我们需要创建一个对话框,用于显示计算器的界面。
在MFC中,可以使用CDialog类来创建对话框。
然后,我们需要在对话框中添加一些控件,例如按钮、文本框等,用于用户输入和显示计算结果。
在MFC中,可以使用CButton、CEdit等类来创建这些控件。
接下来,我们需要处理用户的操作。
例如,当用户点击按钮时,我们需要执行相应的计算操作。
在MFC中,可以通过消息映射来实现。
首先,我们需要在对话框类中添加一个消息映射函数,用于处理按钮的点击事件。
然后,我们需要在消息映射函数中编写相应的代码,例如获取用户输入的数字、进行计算等。
最后,我们需要将消息映射函数与按钮关联起来,以便在用户点击按钮时调用相应的函数。
除了处理用户的操作,MFC还提供了许多其他功能,例如文件操作、数据库访问、图形绘制等。
开发者可以根据自己的需求选择相应的MFC类和函数来实现这些功能。
mfc 消息机制

mfc消息机制
MFC(Microsoft Foundation Class)是微软开发的一种面向对象的C++框架,用于Windows操作系统的应用程序开发。
MFC消息机制是MFC框架的核心之一,其基本原理是在窗口、控件等对象之间传递消息,以便处理事件和交互。
具体而言,MFC消息机制包括以下几个方面:1.消息循环:MFC使用一个消息循环来接受和处理Windows操作系统发送的Windows消息,处理完消息后将处理结果反馈给Windows操作系统。
2.消息映射:MFC中的控件和窗口都有一个关联的消息映射表,用于将Windows消息映射到应用程序代码中的相应处理函数上。
当某个控件或窗口收到消息后,根据消息类型在相应的消息映射表中查找对应的消息处理函数,并调用相应的处理函数处理消息。
3.消息类型:MFC处理的Windows消息类型包括键盘和鼠标消息、定时器消息、系统负载消息、窗口大小变化消息等等,具体的消息类型可以在MFC框架的文档中查找。
4.消息处理函数:MFC中的消息处理函数是C++成员函数,定义为afx_msg 修饰的函数,Windows消息处理函数命名时需要遵循一定的命名规则,例如OnPaint()函数用于处理绘图事件。
需要注意的是,MFC消息机制是针对Windows操作系统设计的,其他操作系统可能具有不同的消息机制。
此外,MFC框架已经不是微软推荐的最先进的应用程序开发框架,已经逐渐被其他框架和技术所取代,例如.NET Framework,WPF,UWP等。
MFC知识点(自己整理的,只供参考)

知识点:不是很全面,只供参考第一章Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。
Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。
在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。
Windows把为这种复杂对象所定义的标识叫做句柄。
常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄事件的描述是一个消息消息的结构:typedef struct tagMSG{HWND hwnd; //产生消息的窗口句柄UINT message;//消息的标识码WPARAM wParam;//消息的附加信息1LPARAM lParam;//消息的附加信息2DWORD time; //消息进入消息队列的时刻POINT pt; //表示发送该消息时鼠标的位置}MSG;消息循环:while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回{TranslateMessage(&msg);//把键盘消息翻译成字符消息DispatchMessage(&msg);//把消息派发给Windows系统创建窗口的三个步骤:注册窗口类:RegisterClass(&wc);创建窗口:hwnd=CreateWindow( lpszClassName,"Windows",WS_OVERLAPPEDWINDOW,120,50,800,600,NULL, NULL, hInstance,NULL);显示窗口:ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);大题:用函数封装Windows程序(P16)第二章类封装:窗口类:class CFrameWnd{public:HWND hWnd;///数据成员public:int RegisterWindow(); //定义及注册窗口类void Create(LPCTSTR lpClassName,LPCTSTR lpWindowName);//创建窗口void ShowWindow(int nCmdShow);//显示与更新窗口void UpdateWindow();};应用程序类:class CWinApp{public:CFrameWnd*m_pMainWnd;//以窗口类的对象作为数据成员public:BOOL InitInstance (int nCmdShow);//在初始化函数中创建及显示窗口int Run();//消息循环};窗口函数的封装——消息映射用DECLARE_MESSAGE_MAP来声明消息映射表用BEGIN_MESSAGE_MAPBEGIN_MESSAGE_MAP(类名称,基类名称)ON_XXXX 例ON_WM_PAINT()END_MESSAGE_MAP来实现消息映射表大题:类封装Windows应用程序第三章应用程序的框架由两个对象组成:应用程序类CWinApp的派生类对象和框架窗口类CFrameWnd的派生类对象,后者作为一个成员对象嵌在前者之中。
MFC原理结构说明

MFC原理结构说明MFC(Microsoft Foundation Classes)是一种在Windows平台上开发图形用户界面(GUI)的框架。
MFC提供了一组类、函数和宏,用于简化Windows应用程序开发过程。
本文将对MFC的原理和结构进行详细说明。
一、MFC的原理1. 类与对象:MFC使用面向对象的编程模型,所有的窗口、控件、消息处理程序等都是通过类来定义和创建的。
每个MFC应用程序都包含一个CWinApp类的对象,这个对象是整个应用程序的入口点。
2. 消息映射机制:在MFC中,消息是Windows事件的一种表示。
MFC使用消息映射机制来处理这些消息。
消息映射机制是程序员在类中定义的一种技术,它将特定消息与对应的消息处理函数关联起来。
当收到消息时,MFC会自动调用相应的消息处理函数进行处理。
3. 消息与事件:在MFC中,消息是Windows事件的抽象表示,而事件是用户界面中的交互行为。
MFC提供了一系列预定义的消息类型,如鼠标点击、按键、窗口关闭等,程序员只需要在类中覆盖对应的消息处理函数,就可以处理这些消息。
4. 窗口类和控件类:在MFC中,窗口类和控件类是界面元素的基础。
MFC提供了一组窗口类(如CWnd、CFrameWnd)和控件类(如CButton、CEdit),程序员可以通过继承这些类来创建自定义的窗口和控件。
5. 文档视图模型:MFC中引入了文档视图模型(Document-View Model)的概念,用于实现应用程序的数据和界面的分离。
文档类(CDocument)管理应用程序的数据,视图类(CView)用于显示数据,而框架窗口类(CFrameWnd)则用于协调文档和视图之间的交互。
二、MFC的结构1. 应用程序类(CWinApp):应用程序类是MFC应用程序的入口点,它派生自CWinApp类。
应用程序类负责初始化应用程序的环境,包括注册窗口类、创建主窗口、加载并运行消息循环等。
MFC Windows应用程序设计复习题2

第9章MFC的文件处理机制1) 文档负责将数据存储到磁盘中,存取过程称为(D) 。
A. 文件访问B. 格式化C. 文件读写D. 串行化2) 一个CArchive 类对象必须与一个( C ) 对象相关联。
A. CObjectB. CFileDialogC. CFile类D. CDocument3) 不能将Newfile 文件的文件指针定位在文件头的方法是( B ) 。
A. Newfile.Open("MyFile.txt", CFile::modeCreate)B. NewFile::Seek( 0L, CFile::end)C. Newfile.SeekToBegin()D. Newfile.Seek(0L, CFile::begin)4)( A )函数用于获取指定文件的文件名。
A. GetFileName()B. GetStatus()C. GetFilePath()D. GetFileTitle()5) 当应用程序读取或写入文件时,文档对象的( )函数被调用,并将( )对象作为参数传递。
6) ( CArchive )类是一个对象数组类,它可以存放任何从CObject 派生出的对象,还可以根据元素的数量动态地调整自己的大小。
7) 在Visual C++中,数据文件的操作通常按照( 打开) 、( 操作) 、( 关闭) 的步骤进行。
8) 写出以读写方式打开文件student.txt 的语句序列(File.Open(“student.txt”,CFile:modeReadWrite); ) 。
10)什么是序列化?答:序列化是面向对象程序设计中应对象这种数据的存储和恢复的要求而产生的一种文件读写机制。
第11章对话框1. 在对话框的编辑器中,最左边的按键的作用是(B )。
A. 激活对话框编辑功能B. 测试对话框C. 控件左对齐D. 控件垂直居中2. 在MFC类中,访问对话框的编辑框中的文本的函数是(C )。
第9章 文档

文档/ 9.1.2 文档/视图结构的优点
使用MFC文档 视图结构的主要优点是该结构能够很好地支 文档/视图结构的主要优点是该结构能够很好地支 使用 文档 持同一文档的多个视图。 持同一文档的多个视图。举个例子可能更能说明该优点 ,如果应用程序允许用户查看电子数据表格格式或者图 表格式的数字数据, 表格式的数字数据,用户可能要同时在电子数据表格中 和图表中查看原始数据, 和图表中查看原始数据,电子数据表格和图表分别属于 不同的视图, 不同的视图,并且如果在电子数据表格中对数据进行编 则数据在图表中要实时得到反映。 辑,则数据在图表中要实时得到反映。如果这个例子不 使用文档/视图结构 则实现起来非常困难, 视图结构, 使用文档 视图结构,则实现起来非常困难,但是如果使 用该结构,则实现起来会很容易。 用该结构,则实现起来会很容易。
9.3.2 视图的滚动与缩放
文档的大小通常都要比其视图可以显示窗口的要大, 文档的大小通常都要比其视图可以显示窗口的要大,如果文 档数据增加或者缩小了视图的边框窗口,此时, 档数据增加或者缩小了视图的边框窗口,此时,视图必 须支持滚动以浏览和编辑比视图窗口大的文档部分。 须支持滚动以浏览和编辑比视图窗口大的文档部分。 MFC提供了 提供了CView类的派生类 类的派生类CScrollView类自动支持视 提供了 类的派生类 类自动支持视 图的滚动。只要在生成应用程序视图类时, 图的滚动。只要在生成应用程序视图类时,选择 CScrollView类作为视图类的基类,生成的视图类就具有 类作为视图类的基类, 类作为视图类的基类 了自动滚动功能。 类可以管理窗口大小、 了自动滚动功能。CScrollView类可以管理窗口大小、视 类可以管理窗口大小 口大小和映射模式并在滚动条消息响应函数中自动进行 滚动处理。 滚动处理。
MFC六大核心机制

MFC六大核心机制1.消息映射机制:MFC使用明确的消息映射机制来处理用户界面和系统事件。
应用程序通过重写消息映射函数来处理不同的消息事件,如鼠标点击、按键操作等。
消息映射机制使得开发者可以方便地响应和处理不同的用户交互动作。
2. 文档视图(Doc/View)体系:MFC采用了文档视图体系,将应用程序数据(文档)和用户界面(视图)分离。
文档表示应用程序的数据,视图代表用户界面,通过文档视图模式可以实现多视图的显示和操作。
开发者可以自定义文档类和视图类,通过它们来管理和展示数据。
3.对象序列化机制:对象序列化是指将对象的状态转换为可以存储或传输的格式,以便于在不同的环境中恢复对象的状态。
MFC提供了强大的对象序列化支持,可以方便地对应用程序的数据进行存储和加载。
开发者只需将需要序列化的成员变量标记为可序列化,并实现相关的序列化函数即可实现数据的持久化。
4.多线程支持:MFC提供了多线程支持,使得应用程序可以在多个线程中同时执行任务。
开发者可以使用MFC提供的线程类来创建和管理线程,并通过消息机制进行线程间的通信。
多线程支持有助于提高应用程序的性能和响应能力。
MFC的运行时类是一组用于封装常用功能的类,包括字符串操作、容器类、文件I/O等。
这些类提供了方便、高效的操作接口,减少了开发者对底层操作的依赖。
开发者可以直接使用MFC提供的运行时类来简化开发过程。
6.扩展性:MFC提供了丰富的扩展性机制,包括自定义控件、自定义对话框、自定义视图等。
开发者可以通过派生已有的MFC类来创建自定义的控件或界面,以满足特定的应用程序需求。
扩展性机制使得开发者可以充分发挥自己的创造力和想象力,实现更加个性化的应用程序。
总结:MFC六大核心机制为开发者提供了丰富的类和功能,使得开发Windows图形界面应用程序更加简单和高效。
通过消息映射机制、文档视图体系、对象序列化机制、多线程支持、运行时类和扩展性机制,开发者可以轻松地实现各种应用程序的需求,并提供更好的用户体验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1 永久性对象与序列化
对磁盘进行读写文件的操作是大多数Windows应用程 序都需要的,为了使每个用MFC编写的Windows应用 程序能按一个统一的方法实现这个操作,MFC规定必 须在Serialize函数中来实现向磁盘读写文件的操作。 Serialize是CObject类提供的一个虚函数,因此凡是希 Serialize CObject 望具有序列化能力的类,都必须以CObject类或其派生 类为基类。 应用程序的数据一般都是由文档对象来管理的,所以 在以MFC AppWizard创建的文档/视图框架为基础的应 用程序运行期间,每当用户新建、打开或保存文档时, 程序就会自动调用文档类对象的Serialize函数 。
9.3 CFile类 类
在很多时候,程序员希望自己直接编写 文件并且直接对文件进行打开、关闭、 读、写等操作。MFC把这些对文件的操 作封装到了一个叫做CFile的类中,使用 这个类的对象能够以更直接的方式来处 理文件。
9.3 CFile类 类
bool CDTIS_PublicInf::Load( const char* sFn ) { CFile file ; if(!file.Open(sFn,CFile::modeRead))return false; CArchive ar( &file, CArchive::load); Serialize( ar ); ar.Close(); file.Close(); return true; }
9.2 对声明为: Class A:public CObject { DECLARE_SERIAL(A) //声明了序列化 private: int m_X,m_Y; … public: Serialize(CArchive&ar);//重写序列化虚函数 }; IMPLEMENT_SERIAL(A,CObject,1)//实现序列化 那么在重写的序列化函数Serialize的实现就应该是: A::Serialize(CArchive&ar) { if(ar.IsStoring()) //存储数据 {ar<<m_X; ar<<m_Y;} else //读取数据 {ar>>m_Y;ar>>m_X;} }
磁盘
9.1 永久性对象与序列化
所谓永久性对象,就是这种对象具有这样一种能力: 它提供了一套描述自身的信息(例如对象的类名称及 数据在内存中的存储格式等)。当应用程序存储对象 时,应用程序可以把这些信息与对象的数据成员一起 打包形成文件,存入永久性存储体,而当再将它读入 内存时,根据该文件中提供的信息,可以把数据按原 样组织起来,从而把对象原原本本恢复出来。 使一个类的对象可以是永久性对象,那么在声明这个 类的时候必须使用MFC定义的两个宏: DECLARE_SERIAL IMPLEMENT_SERIAL
bool CDTIS_PublicInf::Save( const char* sFn ) { CFile file ; if( !file.Open(sFn,CFile::modeCreate|CFile:: modeWrite))return false; CArchive ar( &file,CArchive::store); Serialize( ar ); ar.Close(); file.Close(); return true; }
内存中的对象可以被以文 件的形式存储在永久性存 储介质中,而当应用程序 把它再从永久性存储介质 读入后,如果该对象在内 存中能恢复为原来的状态, 那么这种对象就叫做永久 性对象。在面向对象理论 中,能使对象成为永久性 对象的机制叫做序列化 。
对象在内存中的存储格 式转换为文件的格式
内存中的对象
把文件的格式恢复为 内存中的存储格式
9.2 对象的序列化
CArchive类类定义了一个代表磁盘文件 的CFile类型的指针对象并封装了对文件 的打开及关闭等操作方法,同时重载了 插入符“<<”和提取符“>>”,从而使得 CArchive类的对象相当于一个特殊的I/O 对象,在实际应用中也可以把它看作是 磁盘文件的缓冲。
9.2 对象的序列化
第9章 MFC的文件处理机制 章 的文件处理机制
本章主要内容
序列化(Serialization)机制和永久性对 象 对象的序列化和CArchive类 CFile类
传统文件读写
FILE* 、fopen、fclose、 fprintf、 fscanf fwrite、 fread、fseek
9.1 永久性对象与序列化