MFC教程 MFC下的文件类
- 格式:pdf
- 大小:86.46 KB
- 文档页数:10
由于要写个游戏工具方便编程,要用到文件类的操作,看到这篇文章不错,特转载计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的。
面向存储的文件技术什么是文件?计算机中,一篇文章、一幅图片、一个程序等都是以文件的形式存储在磁盘上的,每个文件都有一个文件名。
计算机就是对文件按名存取的。
文件名的格式如下:主文件名.扩展名。
为什么要在程序中使用文件?通常,程序中的数据在程序运行结束之后,就会从内存中清除,再次运行程序时不会自动出现。
在编制程序的过程中不可避免的会遇到将某些数据永久保存的问题,当程序关闭后,依然可以使用这些数据,这时就需要进行文件操作。
文件类型Visual C++处理的文件通常分为两种:文本文件:只可被任意文本编辑器读取ASCII文本。
二进制文件:指对包含任意格式或无格式数据的文件的统称。
这里只介绍文本文件的读写,INI文件也属于文本文件的范畴,且INI文件的结构和用途与普通的文本文件不同,所以会单独介绍。
第一部分:文本文件文本文件的读写认识CFile类;认识文本文件;能够正确灵活应用文本文件存取信息;避免文本文件读写的常见误区。
CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件、内存文件和socket文件。
客户操作记录实例功能预览及关键知识点许多系统,出于安全或其他原因,常常要求随时对键盘进行监控,利用Hook(钩子)技术编写的应用程序能够很好地达到这个目的。
本软件就制作了一个客户操作记录软件,即在软件运行过程中,用户在键盘上的按键操作会被记录下来,这样对维护软件的正常运行非常有利。
只要启动客户操作记录软件后,不管输入焦点是否在本软件上,按键都会被记录下来。
我们需要的是键盘的系统监控,只要本软件在运行,无论当前计算机在做什么,都能监测到用户按键的行为并做出反应,这就要用到Hook技术。
第2章文档/视图结构应用程序2.0 知识要点1. 文档/视图结构的思想是将数据的管理与显示分离,其中文档用于管理应用程序的数据,而视图是用户界面,用于显示、打印文档中的数据,并管理与用户的交互。
2. SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。
其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的输出。
3. 通过介绍几种SDI结构的典型应用程序来了解其结构及设计方法,典型应用包括:•利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。
•利用定时器控件制作动画程序。
•对鼠标和键盘进行编程的基本方法。
•文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。
•菜单的设计方法。
2.1 文档/视图结构SDI 应用程序由 AppWizard 创建好后,即使没有编写一行代码,仍然可以运行,并且具有一个标准 Windows应用程序所需要的组成成份,程序员的工作就是往这个框架添加必要的代码。
以下通过一个简单实例说明文档/视图结构应用程序的创建过程。
【例2-1】创建一个如图所示的应用程序,在窗口中显示一个矩形框,框中显示“同舟共济自强不息”。
假定本例的工程名为TEST,程序创建过程如下:(1)利用 AppWizard 创建一个 SDI 应用程序框架。
(2)文档类是存放数据的主要地方,本例在其中说明一个存放矩形框数据的 CRect 类对象 r 和一个存放字符串的 CString 对象s,方法为:在工作区的“ ClassView ”中,双击 CTESTDoc 类,在该类代码中添加如下代码:public:CRect r;CString s;说明:CRect 是 MFC 定义的一个类,有 4 个数据成员: left 、 top 、 right 和bottom 。
1.将MFC应用程序的命令处理路径补充完整:命令—(视图类)—(文档类)—文档模板类—(框架窗口类)—应用程序类2.传统的软件开发主要采用(过程)驱动的方法,而WINDOWS程序的开发使用(消息)驱动模型,该模型靠(事件)机制来实现其功能。
3.(主框架类)是应用程序中负责控制菜单、工具栏和状态栏等界面元素的最主要的类。
4.VC++开发环境可以生成的基于MFC AppWizard exe的应用程序类型有(对话框)(单文档/视图结构)和(多文档/视图结构)。
5.包含类定义的文件称为(头文件),包含类中成员函数的实现代码的文件称为(源文件),包含资源信息的文件称为(资源文件)。
6.Resource View的主要功能是(编辑当前工程中的资源)。
7.应用程序向导的主要功能是(帮助生成应用程序)。
8.导的主要功能是(管理各个类中的消息)。
9.工作区窗口一般在开发环境的左侧,它包含工程的多各方面,分别是(ClassView)、(ResourceView)和(FileView)。
10.项目工作区的文件扩展名为(dsw)。
11. WINDOWS应用程序的消息来源主要包括(输入消息)、(控制消息)、(系统消息)和(用户消息)。
12.发送消息可以采用的两个函数是(PostMessage)和(SendMessage)。
mdUI类的主要功能是(主要用来更新命令用户接口的状态,如子菜单、工具栏上的按钮等)。
14.代码ON_UPDATE_COMMAND_UI(ID_TEST,OnUpdateTest)的主要功能是(将对ID_TEST的更新命令接口消息的处理映射到OnUpdateTest函数上)。
15.CString类的功能是(处理字符串),其Format函数的功能是(格式化字符串)。
16.Ctime类的功能是(处理日期时间),其Format函数的功能是(将时间对象格式化为字符串)。
17.MessageBox函数的第一个参数表示(消息文字),第二个参数表示(标题文字),第三个参数表示(图标与按钮组合).18.在windows中,按下一个字符键,会依次触发(WM_KEYDOWN)、(WM_CHAR)和(WM_KEYUP)3个消息19.windows窗口内部需要重新绘制时,会得到一个(WM_PAINT)消息,当释放鼠标右键时,会得到一个(WM_RBUTTONUP)消息。
1.创建文件夹CreateDirectory(%%1,NULL);2.创建文件CFile f ile;file.Open(%%1,CFile::modeCreate|CFile::modeWrite);3.删除文件DeleteFile(%%1);4.删除文件夹RemoveDirectory(%%1);5.删除一个目录下所有的文件夹CFileFind f inder;BOOL b Working =f inder.FindFile(%%1+"\\*.*"); while (bWorking){bWorking =f inder.FindNextFile();if (finder.IsDirectory()){dir.Delete(finder.GetFilePath());}}6.清空文件夹RemoveDirectory(%%1);CreateDirectory(%%1,NULL)7.读取文件char s Read[1024];CFile m File(_T(%%1),CFile::modeRead);while (sRead!=null){mFile.Read(sRead,1024);CString %%2=CString(sRead);%%3}e lse {//找不到下一个文件r eturn;}}}FindClose(hSearch);14.复制一个文件夹下所有的文件夹到另一个文件夹下WIN32_FIND_DATA F ileData;HANDLE h Search;DWORD d wAttrs;char s zDirPath[] =%%2;char s zNewPath[MAX_PATH];char s zHome[MAX_PATH];BOOL f Finished =F ALSE;if (!CreateDirectory(szDirPath,NULL)){//不能创建新的目录return;}BOOL b Working =f inder.FindFile(%%1+"\\*.*");while (bWorking){bWorking =f inder.FindNextFile();if(finder.IsDirectory()){hSearch =F indFirstFile(finder.GetFilePath()+"\\*.*", &FileData); if (hSearch == I NVALID_HANDLE_VALUE){return;}while (!fFinished){lstrcpy(szNewPath, s zDirPath);lstrcat(szNewPath, F ileData.cFileName);if (CopyFile(FileData.cFileName, s zNewPath, F ALSE)){dwAttrs =G etFileAttributes(FileData.cFileName);DWORD d wAttrs;char s zDirPath[] =%%2;char s zNewPath[MAX_PATH];char s zHome[MAX_PATH];BOOL f Finished =F ALSE;if (!CreateDirectory(szDirPath, N ULL)){//不能创建新的目录return;}hSearch =F indFirstFile(%%1+"\\*.*", &FileData);if (hSearch == I NVALID_HANDLE_VALUE){return;}while (!fFinished){lstrcpy(szNewPath, s zDirPath);lstrcat(szNewPath, F ileData.cFileName);if (CopyFile(FileData.cFileName, s zNewPath, F ALSE)) {dwAttrs =G etFileAttributes(FileData.cFileName);if (!(dwAttrs &F ILE_ATTRIBUTE_READONLY)) {SetFileAttributes(szNewPath,dwAttrs |F ILE_ATTRIBUTE_READONLY);}}else{//不能复制文件return;}if (!FindNextFile(hSearch, &FileData)){if (GetLastError() == E RROR_NO_MORE_FILES) {//遍历文件夹完成return;}while (!fFinished){lstrcpy(szNewPath, s zDirPath);lstrcat(szNewPath, F ileData.cFileName);if (CopyFile(FileData.cFileName, s zNewPath, F ALSE)) {dwAttrs =G etFileAttributes(FileData.cFileName);if (!(dwAttrs &F ILE_ATTRIBUTE_READONLY)) {SetFileAttributes(szNewPath,dwAttrs |F ILE_ATTRIBUTE_READONLY);}}else{//不能复制文件return;}if (!FindNextFile(hSearch, &FileData)){if (GetLastError() == E RROR_NO_MORE_FILES) {//遍历文件夹完成fFinished =T RUE;}else{//找不到下一个文件return;}}}FindClose(hSearch);RemoveDirectory(finder.GetFilePath().GetBuffer(0)); }17.以一个文件夹的框架在另一个目录创建文件夹和空文件WIN32_FIND_DATA F ileData;HANDLE h Search;DWORD d wAttrs;char s zDirPath[] =%%2;char s zNewPath[MAX_PATH];char s zHome[MAX_PATH];BOOL f Finished =F ALSE;if (!CreateDirectory(szDirPath, N ULL)){//不能创建新的目录return;}hSearch =F indFirstFile(%%1+"\\*.*", &FileData);if (hSearch == I NVALID_HANDLE_VALUE){return;}while (!fFinished){lstrcpy(szNewPath, s zDirPath);lstrcat(szNewPath, F ileData.cFileName);HANDLE h File=CreateFileHandle h File=CreateFile(szNewPath,GENERIC_REA D,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORM AL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);if(!hFile){//不能创建文件return;}if (!FindNextFile(hSearch, &FileData)){if (GetLastError() == E RROR_NO_MORE_FILES){//遍历文件夹完成fFinished =T RUE;targetfile=%%2+"//"+targetfile/;CopyFile(sourcefile.GetBuffer(0),targetfile.GetBuffer(0),true); }}}20.提取扩展名//#include <string>using s td::string;string s(%%1);size_t i=s.rfind('.',s.length());if(i!=string::npos)CString %%2(s.substr(i+1,s.length()-i));elseCString %%2="";21.提取文件名//#include <string>using s td::string;string s(%%1);char s ep='/';#ifdef _WIN32sep='\\';#endifsize_t i=s.rfind(sep,s.length());if(i!=string::npos)CString %%2(s.substr(i+1,s.length()-i));elseCString %%2="";/*CString p ath(%%1);CString %%2=path.Mid(path.ReverseFind('\\')+1);*/22.提取文件路径//#include <string>using s td::string;string s(%%1);using n amespace b oost::filesystem;try {path p1=complete(path(%%2,native),path(%%1,native));path p2=system_complete(path(%%2,native));CString %%3(p3);}catch(exception& e){//e.what();}25.移动文件MoveFile(%%1,%%2);26.移动一个文件夹下所有文件到另一个目录//#include <string>using s td::string;char s ep='/';#ifdef _WIN32sep='\\';#endifCFileFind f inder;BOOL b Working =f inder.FindFile(%%1+"\\*.*");while (bWorking){bWorking =f inder.FindNextFile();if(!finder.IsDirectory() || f inder.IsDots()){string s(finder.GetFileName());CString s ourcefile(%%1);if(s.rfind(sep,s.length())!=string::npos){sourcefile=sourcefile+"//"+s.substr(i+1,s.length()-i);CString t argetfile(s.substr(i+1,s.length()-i));targetfile=%%2+"//"+targetfile/;MoveFile(sourcefile.GetBuffer(0),targetfile.GetBuffer(0),true); }}}#ifdef _WIN32sep='\\';#endifsize_t s z=s.rfind(sep,s.length());if(sz!=string::npos){CFile O ut;CString s trFilename(s.substr(i+1,s.length()-i));if(Out.Open(%%2+"//"+strfilename,cfile::modewrite%7ccfile::modecreate)){ for(int i=1;i<=2;i++){String F ilename=%%%2+"//"+strfilename+atoi(i);CFile I n;if(In.Open(Filename,CFile::modeRead)){char c bBuffer[4096];int n Filesize=In.GetLength();while(nFilesize>0){int n Size=sizeof(cbBuffer);if(nSize>nFilesize)nSize=nFilesize;try{In.Read(cbBuffer,nSize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM,NULL,e->m_lOsError,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPSTR)&lpMsgBuf,0,NULL)>0){AfxMessageBox(lpMsgBuf);LocalFree(lpMsgBuf);}e->Delete();return;}using s td::string;string s(%%1);char s ep='/';#ifdef _WIN32sep='\\';#endifsize_t s z=s.rfind(sep,s.length());if(sz!=string::npos){CFile O ut,In;int n FIlesize;char *lpMsgBuf;CString s trFilename(s.substr(i+1,s.length()-i));if(!in.Open(%%1,CFile::modeRead)){//不能打开输入文件return;}if(!Out.Open(%%2+"//enc_%22+strfilename,cfile::modewrite/ |C File::modeCrea te)){//不能打开输出文件return;}nFilesize=In.GetLength();lpBuffer=new c har[nFilesize];if(lpBuffer==NULL){//不能分配复制缓存return;}CFileStatus r Status;In.GetStatus(%%1,rStatus);try{In.Read(cbBuffer,nFilesize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM,NULL,e->m_lOsError,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf);LocalFree(lpMsgBuf);}e->Delete();return;}for(int i=0;i<nFilesize;i++){int i bt=lpBuffer[i];ibt+=100;ibt%=256;bpBuffer[i]=(char)ibt;}try{Out.Write(cbBuffer,nFilesize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,e->m_lOsError,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf);LocalFree(lpMsgBuf);}e->Delete();return;}Out.Close();//In.Close();CFile::SetStatus(%%2+"//enc_%22+strfilename,rstatus);d elete[] l pBuffer;}32.文件简单解密//#include <string>using s td::string;string s(%%1);char s ep='/';#ifdef _WIN32sep='\\';#endifsize_t s z=s.rfind(sep,s.length());if(sz!=string::npos){CFile O ut,In;int n FIlesize;char *lpMsgBuf;CString s trFilename(s.substr(i+1,s.length()-i));if(!in.Open(%%2+"//enc_%22+strfilename,cfile::moderead)){ //不能打开输入文件return;}if(!Out.Open(%%1,CFile::modeWrite |C File::modeCreate)){ //不能打开输出文件return;}nFilesize=In.GetLength();lpBuffer=new c har[nFilesize];if(lpBuffer==NULL){//不能分配复制缓存return;}CFileStatus r Status;In.GetStatus(%%2+"//enc_%22+strfilename,rstatus);t ry{In.Read(cbBuffer,nFilesize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |F ORMAT_MESSAGE_FROM _SYSTEM,NULL,e->m_lOsError,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPSTR)&lpMsgBuf,0,NULL)>0){AfxMessageBox(lpMsgBuf);LocalFree(lpMsgBuf);}e->Delete();return;}for(int i=0;i<nFilesize;i++){int i bt=lpBuffer[i];ibt-=100;ibt+=256;ibt%=256;bpBuffer[i]=(char)ibt;}try{Out.Write(cbBuffer,nFilesize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |F ORMAT_MESSAGE_FROM _SYSTEM,NULL,e->m_lOsError,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPSTR)&lpMsgBuf,0,NULL)>0){AfxMessageBox(lpMsgBuf);LocalFree(lpMsgBuf);}e->Delete();return;char c bBuffer[4096];int n FIlesize=In.GetLength();while(nFIlesize>0){{int n Size=sizeof(cbBuffer);if(nSize>nFilesize)nSize=nFilesize;try {In.Read(cbBuffer,nSize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPSTR)&lpMsgBuf,0,NULL)>0){AfxMessageBox(lpMsgBuf);LocalFree(lpMsgBuf);}e->Delete();return;}try {Out.Write(cbBuffer,nSize);}catch(CFileException *e){char *lpMsgBuf;if(FormatMessage(*/WritePrivateProfileString(%%2,%%3,%%4,path);36.获得当前路径TCHAR s zDir[MAX_PATH];GetCurrentDirectory(szDir,MAX_PATH];CString %%1(szDir);37.读取XML数据库//#include <string>//using n amespace s td;char s Read[5192];CFile m File(_T(%%1),CFile::modeRead);mFile.Read(sRead,5192);if(sRead!=null){string t mp;while(sRead!=null){tmp.append(sRead);mFile.Read(sRead,5192);}//%%2="Logs" //%%4="ID" //%%6="Content"//%%3="Log" //%%5="Time"//%%7 c ode %%8 t ime %%9 c ontentstring t arget(%%7),globalTag("<"+%%2+">");string p ropTag1("<"+%%5+">",endTag1("</"+%%5+">"); string p ropTag2("<"+%%6+">",endTag1("</"+%%6+">");int o ffset=tmp.find_first_of(globalTag);while(offset){offset=tmp.find_first_of(globalTag);string d escription;tmp.copy(description.begin(),tmp.find_first_of("\"",offset+1)-offset);if(pare(description)==0){#include "zconf.h"*/HANDLE h File, h FileToWrite;CString s trFilePath;m_ctrEdit.GetWindowText(strFilePath);//打开要进行解压缩的文件hFile =C reateFile(strFilePath, // f ile n ameGENERIC_READ, // o pen f or r eadingFILE_SHARE_READ, // s hare f or r eadingNULL, // n o s ecurityOPEN_EXISTING, // e xisting f ile o nlyFILE_ATTRIBUTE_NORMAL, // n ormal f ileNULL); // n o a ttr. t emplateif (hFile == I NVALID_HANDLE_VALUE){AfxMessageBox("Could n ot o pen f ile t o r ead"); // p rocess e rror return;}HANDLE h MapFile, h MapFileToWrite;//创建一个文件映射hMapFile =C reateFileMapping(hFile, // C urrent f ile h andle. NULL, // D efault s ecurity.PAGE_READONLY, // R ead/write p ermission.0, // M ax. o bject s ize.0, // S ize o f h File. "ZipTestMappingObjectForRead"); // N ame o f m apping o bject. if (hMapFile == N ULL){AfxMessageBox("Could n ot c reate f ile m apping o bject"); return;}LPVOID l pMapAddress, l pMapAddressToWrite;//创建一个文件映射的视图用来作为source lpMapAddress =M apViewOfFile(hMapFile, // H andle t o m apping object.FILE_MAP_READ, // R ead/write p ermission0, // M ax. o bject s ize.0, // S ize o f h File.0); // M ap e ntire f ile.PAGE_READWRITE, // R ead/write p ermission.0, // M ax. o bject s ize.dwFileLengthToWrite, // S ize o f h File. "ZipTestMappingObjectForWrite"); // N ame o f m apping o bject.if (hMapFileToWrite == N ULL){AfxMessageBox("Could n ot c reate f ile m apping o bject f or w rite");return;}lpMapAddressToWrite =M apViewOfFile(hMapFileToWrite, //Handle t o m apping object.FILE_MAP_WRITE, // R ead/write p ermission0, // M ax. o bject s ize.0, // S ize o f h File.0); // M ap e ntire f ile.if (lpMapAddressToWrite == N ULL){AfxMessageBox("Could n ot m ap v iew o f f ile");return;}//这里是将压缩前的大小保存在文件的第一个DWORD里面LPVOID p Buf =l pMapAddressToWrite;//这里就是最重要的,zlib里面提供的一个方法,将源缓存的数据压缩至目的缓存//原形如下://int c ompress (Bytef *dest, u Longf *destLen, c onst B ytef *source, u Long s ourceLen); //参数destLen返回实际压缩后的文件大小。
MFC编程基础教程MFC(Microsoft Foundation Classes)是一套基于C++的应用程序框架,用于开发可视化的Windows应用程序。
MFC提供了丰富的工具和类库,使程序开发人员能够更加轻松地创建Windows应用程序。
一、MFC框架的介绍MFC是一种C++编程框架,用于开发Windows应用程序。
MFC提供了一系列的类和方法,用于处理窗口、消息处理、资源管理等常见的任务。
MFC框架的核心是一个称为CWinApp的类,它是应用程序的入口点。
二、MFC的基本概念1.窗口:MFC使用窗口来显示应用程序的用户界面。
窗口可以是主窗口、对话框、工具栏、菜单等。
2.消息处理函数:MFC使用消息机制来处理用户输入和系统事件。
消息处理函数是在收到特定的消息时执行的代码块。
3.控件:控件是用于用户交互的窗口元素,例如按钮、文本框、列表框等。
4.对象模型:MFC使用面向对象的概念来管理窗口和控件。
每个窗口或控件都是一个C++对象,有自己的属性和方法。
三、MFC应用程序的创建1.创建一个MFC应用程序的步骤:a. 新建项目:在Visual Studio中创建一个MFC应用程序项目。
c.编写代码:编写消息处理函数和其他代码,实现应用程序的功能。
d.编译和运行:编译项目并运行应用程序。
四、MFC消息处理1.应用程序的消息循环:MFC应用程序的消息循环负责接收和处理用户输入和系统事件。
2.消息映射表:消息映射表是一个用于将消息与消息处理函数关联的数据结构。
3.常见的消息类型:MFC提供了大量的消息类型,包括鼠标和键盘消息、窗口消息、菜单消息等。
五、MFC控件的使用1.控件的创建和操作:使用MFC提供的类和方法来创建和操作控件。
2.控件的属性设置:通过设置控件的属性来改变它的外观和行为。
3.控件事件的处理:通过处理控件的事件来响应用户的操作。
六、MFC对话框的使用2.对话框控件的操作:对话框中的控件可以像其他控件一样进行操作。
mfc基本程序
MFC(Microsoft Foundation Class)是微软基础类库,是微软公司实现的一个c++类库,主要封装了大部分Windows API函数。
下面是MFC基本程序的步骤:
1. 添加相应的头文件和库文件:在使用API时,需要添加相应的头文件和库文件,例如PlaySound需要头文件mmsystem.h和库文件WINMM.LIB的支持。
2. 设计窗口类:定义一个从CWnd 类继承而来的派生类,负责处理用户交互和绘图等操作。
3. 注册窗口类:使用AfxRegisterClass 函数将窗口类注册到 Windows 系统中。
4. 创建窗口对象:使用CreateWindow 函数创建一个窗口对象,并将其显示在屏幕上。
5. 循环取消息:通过消息循环从Windows 系统接收消息,并将其发送给窗口对象进行处理。
6. 处理消息:在窗口对象的处理函数中,根据接收到的消息类型进行相应的处理。
请注意,上述步骤仅为MFC基本程序的一般性指导,具体的程序编写可能因项目需求和个人喜好而有所不同。
如果你需要更详细的信息或有特定的问题,请提供更多细节以便获得更准确的回复。
excel合成需要如下步骤:打开MFC工程(任何工程都可以,此处以串口为例)→打开MFC工程类向导并选择Automation→点击Add class,并选择from a type library。
江会弹出如下浏览框在浏览框中找到并选择office的excel.exe(或者是excel.olb),这里必须是office,而不能是wps,因为wps对应的事excel.et而不是exe文件,这里我选择的是excel.exe,我是用的是office2010,通过电脑的文件搜索功能定位了excel.exe的位置并添加的。
打开excel.exe之后,选择新类,如图总共选择六个类,分别是_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,即可达到用MFC操作excel的前提条件。
选完之后,可在classview中看到如下六个新类。
→在My***Dlg.cpp中加入#include”excel.h”与#include”comdef.h”,同时,在My***.cpp中加入#include”excel.h”→在My***App::InitInstance(),加入如下代码:if(!AfxOleInit() ){AfxMessageBox("初始化Ole出错!");return FALSE;},效果如图:注意excel保存时需要添加“comdef.h”头文件。
到此为止,excel在MFC中的配置环境已完成。
接下来添加一个按键,用于保存成excel文档,按键对应的程序如下:在对应(需要操作excel的)的CPP文件前加#include"comdef.h"_Application ExcelApp;Workbooks workbooks;_Workbook workbook;Worksheets sheets;_Worksheet sheet;Range range;if(!ExcelApp.CreateDispatch("Excel.Application",NULL)){AfxMessageBox("创建Excel服务失败!");}//创建Excel2000服务器(启动Excel)ExcelApp.SetVisible(false);workbooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);//用来锁定对应的工作簿workbook.AttachDispatch(workbooks.Add(COleVariant((_bstr_t)CString(). AllocSysString())));//得到Worksheetssheets.AttachDispatch(workbook.GetWorksheets(),true);sheet.AttachDispatch(sheets.GetItem(_variant_t("Sheet1")),true);//得到全部Cells,此时,range是cells的集合.range.AttachDispatch(sheet.GetCells(),true);//设置1行2列的单元的值range.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("This Is A Excel Test Program!"));TCHAR szPath[MAX_PATH];::GetCurrentDirectory(MAX_PATH,szPath);CString strPath(szPath);strPath+=_T("\\test.xlsx");sheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);ExcelApp.SetVisible(true);ExcelApp.ReleaseDispatch();workbooks.ReleaseDispatch();workbook.ReleaseDispatch();sheets.ReleaseDispatch(); sheet.ReleaseDispatch();Excel的数据读取:运用在MSDN中的示例函数(具体函数见excel文档创建示例4):根据顺序,依次从系统中获取app、books、book、sheets、sheet、range、对象,然后获取路径strpath。
VS2008 MFC教程什么是MFC?MFC(Microsoft Foundation Classes)是一组用于Windows开发的C++类库。
它是一种基于对象的编程框架,旨在简化Windows图形用户界面(GUI)应用程序的开发。
MFC提供了许多预定义的类和函数,可用于创建窗口、对话框、菜单、工具栏等常见界面元素。
使用MFC可以大大加快GUI应用程序的开发速度,并提供Windows应用程序的一致外观和行为。
VS2008中的MFCMFC应用程序在Visual Studio 2008中创建一个MFC应用程序非常简单。
可以选择使用MFC应用程序向导,该向导将引导您完成创建应用程序的过程。
在创建应用程序时,您可以选择使用对话框或单文档/多文档界面。
MFC文件结构一个MFC应用程序通常包含多个文件。
以下是一些主要文件和文件夹:•AppName.cpp:包含应用程序的主要函数WinMain。
•AppName.h:包含应用程序的头文件,声明了应用程序类的成员变量和函数。
•AppNameDoc.cpp、AppNameDoc.h:包含应用程序的文档类,并实现了文档的读写功能。
•AppNameView.cpp、AppNameView.h:包含应用程序的视图类,用于处理用户界面和绘图。
•AppNameDlg.cpp、AppNameDlg.h:如果应用程序使用了对话框界面,则会包含对话框类的文件。
MFC消息映射在MFC中,用户界面中的各种事件(如按钮点击、菜单选择等)被称为消息。
消息映射允许您将特定消息与特定函数关联起来。
例如,当用户点击一个按钮时,MFC将自动调用与该按钮关联的函数,从而实现与按钮相关的操作。
MFC使用宏定义来实现消息映射。
您可以通过在类的消息映射表中添加条目来指定消息和对应的函数。
例如:BEGIN_MESSAGE_MAP(CMyView, CView)ON_COMMAND(ID_FILE_OPEN, &CMyView::OnOpenFile) ON_COMMAND(ID_FILE_SAVE, &CMyView::OnSaveFile) END_MESSAGE_MAP()上述代码将ID_FILE_OPEN和ID_FILE_SAVE消息与CMyView类中的OnOpenFile和OnSaveFile函数相关联。
mfc 教程MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++框架,由Microsoft推出。
它提供了一系列的类和函数,简化了Windows编程的复杂性,使开发人员可以更轻松地创建各种功能强大且交互性良好的应用程序。
MFC教程的目的是帮助初学者了解MFC的基本概念和使用方法,以便能够利用MFC框架开发自己的Windows应用程序。
本教程将介绍MFC的主要组成部分、常用类以及一些常见的编程技巧,帮助读者快速上手。
第一部分将介绍MFC的基本概念和架构。
我们将了解MFC是如何工作的,包括应用程序对象、文档/视图体系结构和消息映射等主要概念。
我们还将学习如何创建一个简单的MFC应用程序,并进行窗口的创建和管理。
第二部分将深入介绍MFC的常用类。
我们将重点介绍窗口类和控件类,包括CWnd、CFrameWnd、CDialog、CButton等。
我们将学习如何使用这些类创建窗口、控件,并处理用户输入事件。
我们还将讨论一些常见的绘图和动画技术,如GDI绘图和使用定时器实现动画效果。
第三部分将介绍MFC的高级特性和编程技巧。
我们将学习如何使用MFC的文档/视图体系结构创建多文档应用程序,并进行文档的管理和视图的同步更新。
我们还将介绍如何通过自定义类和重载消息处理函数来实现定制化的功能。
此外,我们还将讨论一些高级主题,如线程编程和网络编程。
最后,本教程还将介绍一些常见的MFC开发工具和资源。
我们将介绍MFC的IDE(集成开发环境)和调试工具,并提供一些常用的网站和论坛供读者进一步学习和交流。
总结起来,本教程将帮助读者掌握MFC的基本概念和编程技巧,并能够利用MFC框架开发自己的Windows应用程序。
我们将通过实例和演示代码来讲解,帮助读者理解和应用所学知识。
阅读本教程后,读者将具备一定的MFC编程基础,并能够进一步深入研究和应用MFC框架。
希望本教程能够对MFC初学者有所帮助,让他们更加轻松地学习和掌握MFC编程。
MFC使用教程范文MFC(Microsoft Foundation Classes)是微软公司为Windows操作系统开发的一套面向对象的应用程序框架,用于简化Windows应用程序的开发过程。
MFC提供了一系列的类和函数,开发者可以利用这些类和函数来创建、管理和控制Windows应用程序。
本文将为您介绍MFC的基本使用方法和步骤。
一、MFC的基本概念和组成MFC是建立在Windows API之上的一层封装,它提供了一系列的类和函数,开发者可以利用这些封装好的类和函数来开发Windows应用程序。
MFC的组成包括:应用程序类、窗口类、对话框类和视图类。
1.应用程序类:MFC的应用程序类是整个应用程序的入口点,它包含了应用程序的初始化和销毁过程,以及主消息循环。
2.窗口类:窗口类用于创建和管理应用程序中的窗口,包括主窗口、子窗口和对话框等。
3.对话框类:对话框类用于创建和管理应用程序中的对话框,对话框是一种特殊的窗口,用于和用户进行交互。
4.视图类:视图类用于创建和管理应用程序中的视图,视图是应用程序中显示数据的区域。
二、MFC应用程序的创建步骤下面将介绍MFC应用程序的创建步骤。
1. 打开Visual Studio IDE,并选择"创建新项目"。
2.在"创建新项目"对话框中,选择"C++"->"MFC",点击"下一步"。
3.在"应用程序信息"对话框中,填写应用程序的名称和位置等信息,点击"完成"。
4. Visual Studio将自动创建一个MFC应用程序模板,并打开主窗口的代码和界面文件。
5.在主窗口的代码文件中,可以编写处理消息和事件的代码。
6.在主窗口的界面文件中,可以通过拖拽控件来设计应用程序的界面。
7.编译并运行应用程序,查看效果。
三、MFC应用程序的消息处理MFC应用程序中的消息处理是通过重载消息处理函数来实现的。
使用MFC操作EXCEL文件本文档适用于:•Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0 以上•Microsoft OLE 库第一步:建立一个自动化工程1.启动VC 6.0,打开新建对话框,新建一个MFC AppWizard(exe)工程,这里工程明设置为TestExcel。
2.进入MFC 应用程序向导,选择基本对话框,直接点击完成,工程文件结构如下图:3.打开MFC ClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass按钮,选择From a type library...,弹出文件选择对话框,之后定位到Microsoft Office的安装目录(通常为C:\Program Files\Microsoft Office\Office),选择EXCEL9.OLB注意,确定后,弹出Confirm Classes窗口,选择列表中的所有类,单击OK按钮。
注意文件名EXCEL9.OLB,因安装的Office版本不同而有所差异,EXCEL9.OLB对应的是Microsoft Office 2000,微软命名方式为Excel+数字的形式,Office版本越高,数字越大。
4.返回编辑器,查看工程文件,可发现多了EXCEL9.H及EXCEL9.CPP两个文件。
5.打开stdafx.h头文件确保包含如下头文件:#include <afxdisp.h>#include "excel9.h"6.打开TestExcel.cpp文件,修改CTestExcelApp::InitInstance(),加入如下代码:BOOL CTestExcelApp::InitInstance(){if( !AfxOleInit() ){AfxMessageBox("初始化Ole出错!");return FALSE;}AfxEnableControlContainer();............return FALSE;}为保证编译时不产生重复定义错误,打开excel9.h文件,在文件开始位置加入如下代码:#if !defined _HEAD_FILE_EXCEL9_#define _HEAD_FILE_EXCEL9_相应的,在文件末尾加入:#endif到此,OLE自动化工程建立完成。
mfc单文档例子以下是一个简单的MFC单文档(SDI)应用程序的示例:1. 首先,创建一个新的MFC应用程序项目。
在Visual Studio中,选择“文件”菜单,然后选择“新建”->“项目”。
在“新建项目”对话框中,选择“MFC应用程序”,然后输入项目名称和位置,并单击“确定”。
2. 在“MFC应用程序向导”中,选择“单文档”作为应用程序类型,并单击“完成”按钮。
3. 在生成的代码中,找到`CMainFrame`类。
这是应用程序的主窗口类。
4. 在`CMainFrame`类的`OnCreateClient`函数中,添加以下代码:```cppvoid CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext pContext){// 创建视图窗口m_(_T("My View"), WS_CHILD WS_VISIBLE WS_BORDERWS_HSCROLL WS_VSCROLL, CRect(0, 0, 800, 600), this,ID_VIEW_WIN);}```5. 在`CMainFrame`类的`OnCreate`函数中,添加以下代码:```cppBOOL CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;// 创建工具栏和状态栏CToolBarCtrl tb;CRect rect(0, 0, 800, 24);(WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPERCBRS_TOOLTIPS CBRS_FLYBY, rect, this, ID_VIEW_TB);m_(WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPER CBRS_TOOLTIPS CBRS_FLYBY, rect, this, ID_VIEW_TB);m_(this);m_(0, ID_VIEW_STATUSBAR, SBPS_STRETCH, 0);m_(1, ID_VIEW_STATUSBAR2, SBPS_STRETCH, 0);m_(2, ID_VIEW_STATUSBAR3, SBPS_STRETCH, 0);m_(0, SBPS_NORMAL);m_(1, SBPS_NORMAL);m_(2, SBPS_NORMAL);m_(0, _T("Ready"));m_(1, _T("Ready"));m_(2, _T("Ready"));return TRUE;}```6. 编译并运行应用程序。
mfc使用教程MFC使用教程不要标题MFC是Microsoft Foundation Class的缩写,是一套C++的库,用于开发Windows平台的应用程序。
以下是一个简单的MFC使用教程,帮助你了解如何创建一个基本的MFC应用程序。
首先,打开Visual Studio并选择创建新项目。
在项目模板中,选择"MFC应用程序"。
在下一步中,选择"对话框"作为应用程序类型。
接下来,选择项目的名称和位置,然后点击"完成"按钮。
Visual Studio将自动生成一个MFC应用程序的基本框架。
应用程序的主要代码位于"MainFrm.cpp"和"MainFrm.h"文件中。
打开"MainFrm.cpp"文件,你将看到一个名为"Create"的函数。
在这个函数中,可以创建应用程序的主窗口。
在"Create"函数的内部,使用"MFC应用程序向导"提供的函数来创建一个对话框。
例如,可以使用"CDialogEx"类来创建一个简单的对话框。
在"Create"函数的最后,需要调用"ShowWindow"函数显示主窗口,并调用"UpdateWindow"函数来更新窗口。
在"MainFrm.h"文件中,你可以定义应用程序的主窗口类。
例如,可以继承自"CFrameWnd"类,并添加自定义的成员变量和函数。
在"MainFrm.cpp"文件的"Create"函数中,还可以添加一些自定义的代码,例如设置窗口的标题和大小,添加菜单和工具栏等。
最后,编译并运行应用程序。
你应该能够看到一个简单的MFC应用程序的窗口。
MFC中实现多文档MFC(Microsoft Foundation Class)是用于Microsoft Windows操作系统的应用程序框架。
多文档是指在一个应用程序中同时打开和管理多个文档的能力。
下面是如何在MFC中实现多文档的步骤:1.创建一个新的MFC应用程序项目:- 在Visual Studio中选择“文件”>“新建”>“项目”。
- 在“左侧导航栏”中选择“Visual C++”>“MFC”。
-选择“MFC应用程序”并点击“下一步”。
-输入项目名称,并选择存储位置,然后点击“下一步”。
-选择“多文档”应用程序类型,并确保“使用多文档视图”选中,然后点击“完成”。
2.修改文档类:- 打开“xxxDoc.h”文件(xxx为你的应用程序名称)。
-在文档类声明中添加一个成员变量来保存文档的数据。
3.修改视图类:- 打开“xxxView.h”文件。
-在视图类声明中添加用户界面控件(如按钮、菜单等)来实现文档的交互操作。
-在视图类声明中,添加成员变量来保存文档数据的指针。
- 在视图类的实现文件中,重写OnInitialUpdate(函数,初始化视图。
4.修改主框架窗口类:- 打开“MainFrm.h”文件。
-在主框架窗口类声明中,添加成员变量来保存文档视图的指针。
- 在主框架窗口类的实现文件中,重写OnCreateClient(函数,创建并管理多个文档视图的布局。
5.添加命令处理函数:- 打开“xxxView.cpp”文件。
-在视图类的实现文件中,添加命令处理函数,例如保存文档、打开新文档等。
6.调试和测试:-编译并运行应用程序。
-打开多个文档,观察每个文档的窗口布局和视图。
-测试各种文档操作,如保存、打开、关闭等。
以上是使用MFC框架实现多文档的基本步骤。
根据你的具体需求,你可以进一步定制和扩展多文档功能,例如添加更多自定义的菜单和工具栏选项、实现文档之间的数据交互等。
一、C语言的文件操作通过FILE结构体实现。
1、文件的打开C语言中对文件进行操作必须首先打开文件,打开文件主要涉及到fopen函数。
fopen函数的原型为FILE*fopen(const char*path,const char*mode)示例:FILE*pFile=fopen(“1.txt”,”w”);其中path为文件路径,mode为打开方式。
1)对于文件路径,只需注意若未明确给出绝对路径,则默认该文件在工程的目录下。
若需给出绝对路径,则注意转义字符'\',比如有文件test.txt存放在C 盘根目录下,则文件路径参数值应为C:\\test.txt。
2)对于mode,主要由r,w,a,+,b,t六个字符组合而成。
r:只读方式,文件必须存在;w:只写方式,若文件存在,则原有内容会被清除;若文件不存在,则会建立文件;a:追加方式打开只写文件,只允许进行写操作,若文件存在,则添加的内容放在文件末尾;若不存在,则建立文件;+:可读可写;b:以二进制方式打开文件;t:以文本方式打开文件(默认方式下以文本方式打开文件)。
下面是常见的组合:r:以只读的方式打开文件,只允许读,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部;r+:以可读可写的方式打开文件,允许读写,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部;rb+:以可读可写、二进制方式打开文件,允许读写,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部;rt+:以可读可写、文本方式打开文件,允许读写,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部;w:以只写的方式打开文件,只允许写,若文件存在,文件中原有内容会被清除;若文件不存在,则创建文件,打开成功后返回文件指针,位置指针指向文件头部;w+:以读写的方式打开文件,允许读写,若文件存在,文件中原有内容会被清除;若文件不存在,则创建文件,打开成功后返回文件指针,位置指针指向文件头部;a:以追加、只写的方式打开文件,只允许写。
MFC单文档窗体类的创建过程MFC(Microsoft Foundation Classes)是微软公司提供的一种面向对象的程序开发工具,用于简化Windows操作系统的应用程序开发。
MFC 提供了丰富的类库和框架,使开发人员能够更快速地创建Windows程序。
在MFC中,窗体类是常用的一种类,用于创建窗体应用程序。
本文将详细介绍MFC单文档窗体类的创建过程。
在MFC中,创建单文档窗体类的过程可以分为以下几个步骤:1.创建一个新的MFC应用程序项目首先,需要使用MFC应用程序向导创建一个新的MFC应用程序项目。
打开Visual Studio,选择“文件”->“新建”->“项目”,在“新建项目”对话框中选择“Visual C++”->“MFC”->“MFC应用程序”,并填写项目名称和保存路径,点击“确定”按钮。
接下来,按照向导的指引,选择“单文档”应用程序类型,并点击“完成”按钮。
2.添加对话框资源在MFC应用程序项目创建完成后,需要添加对话框资源。
在资源视图中,选择“添加”->“资源”->“对话框”,在弹出的对话框中输入对话框名称,并点击“确定”按钮。
此时,会自动生成一个对话框资源,可以在其中添加所需的控件。
3.创建窗体类在MFC应用程序项目中,会自动生成一个CWinApp类和一个CMainFrame类。
我们需要创建一个新的窗体类,用于承载对话框资源。
在Solution Explorer中,右击“源文件”->“添加”->“类”,在弹出的“添加类”对话框中选择“MFC”->“MFC类”->“单文档视图”,并填写类名称和保存路径,点击“添加”按钮。
此时,会自动生成一个新的窗体类,可以在其中添加处理逻辑。
4.修改窗体类代码打开新生成的窗体类的头文件和源文件,可以看到自动生成的代码。
在头文件中,需要包含所需的头文件,并声明成员变量和成员函数。
在源文件中,需要实现窗体类的构造函数、析构函数和其他成员函数。
MFC总结(一):MFC中文件操作、查找与选择总结(1)本文主要涉及以下几个方面,均为在MFC编程中较为常用的:CFile操作、CArchive操作、如何选择文件和文件夹、如何查找文件、获取当前目录、_access函数等。
(一)使用CFile类操作文件CFile类在MFC的文件操作中应该是最常用的了。
主要的成员函数有Open、Close、Write、Read、Seek、SeekToEnd、GetLength、GetPosition,具体用法见MSDN。
(1)文件打开操作:文件打开有两种方式,一种是先定义类对象,在用Open函数打开;一种是在定义类对象时传入文件名和打开方式。
分别如下CFile file;if(!file.Open(lpszFileName, nOpenFlags ))return;或CFile file(lpszFileName, nOpenFlags);(2)文件打开方式:文件打开方式,即上述nOpenFlags的值主要由一些宏定义的值组合而成,具体见MSDN,常用的有如下几种:A. CFile::modeCreate | CFile::modeNoTruncate |CFile::modeWrite,以写文件的方式打开,如果文件不存在,则新建文件,否则打开已有文件进行写入操作,此时不会清空原有文件;B. 将上述CFile::modeWrite更换为CFile::modeRead或者CFile::modeReadWrite可实现读操作或者同时读写。
(3)判断文件结束判断文件是否结束,没有结束则继续读取,否则关闭退出。
这点在编程时常用。
对于CFile常用的判断文件结束的方法是:while(file.GetPosition() < file.GetLength()){ //文件未结束//Add code ....}(4)值得注意的几点:A. 当文件名中包含路径时,要注意使用\\,如C:\\MyFile.DAT,在Unicode下时,需要使用_T("C:\\MyFile.DAT");B. 采用(2)中A方式写文件时,注意使用file.SeekToEnd()将文件指针移至文件尾,再写入,否则会覆盖已有的数据,这点经常被很多初学者忽视;C. 在打开文件后就要紧接着写下Close,养成这样的习惯,避免忘记关闭文件。
MFC下的文件类11.MFC下的文件类1.文件操作的方法使用Visual C++编程,有如下方法进行文件操作:(1)使用标准C运行库函数,包括fopen、fclose、fseek等。
(2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。
不过,在Win32下,这些函数主要是为了和Win16向后兼容。
(3)使用Win32下的文件和目录操作函数,如CreateFile,CopyFile,DeleteFile,FindNextFile,等等。
Win32下,打开和创建文件都由CreateFile完成,成功的话,得到一个Win32下的句柄,这不同于“C”的fopen返回的句柄。
在Win16下,该句柄和C运行库文件操作函数相容。
但在Win32下,“C”的文件操作函数不能使用该句柄,如果需要的话,可以使用函数_open_osfhandle从Win32句柄得到一个“C”文件函数可以使用的文件句柄。
关闭文件使用Win32的CloseHandle。
在Win32下,CreateFile可以操作的对象除了磁盘文件外,还包括设备文件如通讯端口、管道、控制台输入、邮件槽等等。
(4)使用CFile和其派生类进行文件操作。
CFile从CObject派生,其派生类包括操作文本文件的CStdioFile,操作内存文件的CmemFile,等等。
CFile是建立在Win32的文件操作体系的基础上,它封装了部分Win32文件操作函数。
最好是使用CFile类(或派生类)的对象来操作文件,必要的话,可以从这些类派生自己的文件操作类。
统一使用CFile的界面可以得到好的移植性。
2.MFC的文件类MFC用一些类来封装文件访问的Win32 API。
以CFile为基础,从CFile派生出几个类,如CStdioFile,CMemFile,MFC内部使用的CMiororFile,等等。
1.CFile的结构1.CFile定义的枚举类型CFile类定义了一些和文件操作相关的枚举类型,主要有四种:OpenFlags,Attribute,SeekPosition,hFileNull。
MFCCFile类操作文件的方法当把结构逐个写入硬盘文件时,注意,结构中不能包含string变量类型,因为,string是不定长的变量类型。
应使用char xx[90]形式的变量,文件操作API和CFile类在VC中,操作文件的方法有两种,一是利用一些API函数来创建,打开,读写文件,另外一个是利用MFC的CFile类,CFile封装了对文件的一般操作。
下面酒主要介绍如何利用这两种方法操作文件。
1.创建或打开一个文件API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。
HANDLE CreateFile(LPCTSTR lpFileName, // 要打开的文件名DWORD dwDesiredAccess, // 文件的操作属性DWORD dwShareMode, // 文件共享属性LPSECURITY_ATTRIBUTES lpSecurityAttributes,// 文件安全特性DWORD dwCreationDisposition, //文件操作DWORD dwFlagsAndAttributes, // 文件属性HANDLE hTemplateFile // 如果不为零,则指定一个文件句柄。
新文件将从这个文件中复制扩展属性);文件的操作属性:如果为零,表示只允许获取与一个设备有关的信息,GENERIC_READ 表示允许对设备进行读访问;如果为GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);文件的共享属性:零表示不共享;FILE_SHARE_READ 或FILE_SHARE_WRITE 表示允许对文件进行读/写共享访问文件的操作有:CREATE_NEW:创建文件;如文件存在则会出错CREATE_ALWAYS:创建文件,会改写前一个文件OPEN_EXISTING:文件必须已经存在。
MFC总结(一):MFC中文件操作、查找与选择总结(1)本文主要涉及以下几个方面,均为在MFC编程中较为常用的:CFile操作、CArchive操作、如何选择文件和文件夹、如何查找文件、获取当前目录、_access函数等。
(一)使用CFile类操作文件CFile类在MFC的文件操作中应该是最常用的了。
主要的成员函数有Open、Close、Write、Read、Seek、SeekToEnd、GetLength、GetPosition,具体用法见MSDN。
(1)文件打开操作:文件打开有两种方式,一种是先定义类对象,在用Open函数打开;一种是在定义类对象时传入文件名和打开方式。
分别如下CFile file;if(!file.Open(lpszFileName, nOpenFlags ))return;或CFile file(lpszFileName, nOpenFlags);(2)文件打开方式:文件打开方式,即上述nOpenFlags的值主要由一些宏定义的值组合而成,具体见MSDN,常用的有如下几种:A. CFile::modeCreate | CFile::modeNoTruncate |CFile::modeWrite,以写文件的方式打开,如果文件不存在,则新建文件,否则打开已有文件进行写入操作,此时不会清空原有文件;B. 将上述CFile::modeWrite更换为CFile::modeRead或者CFile::modeReadWrite可实现读操作或者同时读写。
(3)判断文件结束判断文件是否结束,没有结束则继续读取,否则关闭退出。
这点在编程时常用。
对于CFile常用的判断文件结束的方法是:while(file.GetPosition() < file.GetLength()){ //文件未结束//Add code ....}(4)值得注意的几点:A. 当文件名中包含路径时,要注意使用\\,如C:\\MyFile.DAT,在Unicode下时,需要使用_T("C:\\MyFile.DAT");B. 采用(2)中A方式写文件时,注意使用file.SeekToEnd()将文件指针移至文件尾,再写入,否则会覆盖已有的数据,这点经常被很多初学者忽视;C. 在打开文件后就要紧接着写下Close,养成这样的习惯,避免忘记关闭文件。