MFC教程 MFC下的文件类

合集下载

MFC中的文件读写操作

MFC中的文件读写操作

由于要写个游戏工具方便编程,要用到文件类的操作,看到这篇文章不错,特转载计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的。

面向存储的文件技术什么是文件?计算机中,一篇文章、一幅图片、一个程序等都是以文件的形式存储在磁盘上的,每个文件都有一个文件名。

计算机就是对文件按名存取的。

文件名的格式如下:主文件名.扩展名。

为什么要在程序中使用文件?通常,程序中的数据在程序运行结束之后,就会从内存中清除,再次运行程序时不会自动出现。

在编制程序的过程中不可避免的会遇到将某些数据永久保存的问题,当程序关闭后,依然可以使用这些数据,这时就需要进行文件操作。

文件类型Visual C++处理的文件通常分为两种:文本文件:只可被任意文本编辑器读取ASCII文本。

二进制文件:指对包含任意格式或无格式数据的文件的统称。

这里只介绍文本文件的读写,INI文件也属于文本文件的范畴,且INI文件的结构和用途与普通的文本文件不同,所以会单独介绍。

第一部分:文本文件文本文件的读写认识CFile类;认识文本文件;能够正确灵活应用文本文件存取信息;避免文本文件读写的常见误区。

CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件、内存文件和socket文件。

客户操作记录实例功能预览及关键知识点许多系统,出于安全或其他原因,常常要求随时对键盘进行监控,利用Hook(钩子)技术编写的应用程序能够很好地达到这个目的。

本软件就制作了一个客户操作记录软件,即在软件运行过程中,用户在键盘上的按键操作会被记录下来,这样对维护软件的正常运行非常有利。

只要启动客户操作记录软件后,不管输入焦点是否在本软件上,按键都会被记录下来。

我们需要的是键盘的系统监控,只要本软件在运行,无论当前计算机在做什么,都能监测到用户按键的行为并做出反应,这就要用到Hook技术。

MFC编程之文档、视图结构应用程序

MFC编程之文档、视图结构应用程序

第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 。

MFC讲义

MFC讲义

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)消息。

MFC文件操作大全

MFC文件操作大全

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编程基础教程

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基本程序

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基本程序的一般性指导,具体的程序编写可能因项目需求和个人喜好而有所不同。

如果你需要更详细的信息或有特定的问题,请提供更多细节以便获得更准确的回复。

一步一步教你如何通过MFC操作excel

一步一步教你如何通过MFC操作excel

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。

vs2008mfc教程

vs2008mfc教程

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函数相关联。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件的读写 √ √ √ Read ReadHuge(向后兼容) Write WriteHuage(向后兼容) Flush ReadFile 调用Read成员函数 WriteFile 调用Write成员函数 FlushFileBuffers
文件定位 √ √ √ Seek SeekToBegin SeekToEnd GetLength SetLength SetFilePointer 调用Seek成员函数 调用Seek成员函数 调用Seek成员函数 SetEndOfFile
/tutorial/mfc/mfc11.php(第 3/10 页)2006-2-18 15:45:04
MFC教程_ MFC下的文件类
end = 0x2 }; 4. hFileNull hFileNull定义了空文件句柄 enum { hFileNull = -1 }; 1. CFile的其他一些成员变量 CFile除了定义枚举类型,还定义了一些成员变量。例如: UINT m_hFile 该成员变量是public访问属性,保存::CreateFile返回的操作系统的文件 句柄。MFC重载了运算符号HFILE来返回m_hFile,这样在使用HFILE类 型变量的地方可以使用CFile对象。 BOOL m_bCloseOnDelete; CString m_strFileName; 这两个成员变量是protected访问属性。m_bCloseOnDelete用来指示是否 在关闭文件时删除CFile对象;m_strFileName用来保存文件名。 2. CFile的成员函数 CFile的成员函数实现了对Win32文件操作函数的封装,完成以下动作:打开、创建、关闭文件, 文件指针定位,文件的锁定与解锁,文件状态的读取和修改,等等。其中,用到了m_hFile文件句 柄的一般是虚拟函数,和此无关的一般是静态成员函数。一般地,成员函数被映射到对应的 Win32函数,如表11-1所示。 表11-1 CFile函数对Win32文件函数的封装 虚 拟 静 态 成员函数 对应的Win32函数
MFC教程_ 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的结构
/tutorial/mfc/mfc11.php(第 2/10 页)2006-2-18 15:45:04
MFC教程_ MFC下的文件类
//第十五、十六位,文件以二进制或者文本方式打开,在派生类CStdioFile中用 typeText = 0x4000, typeBinary = (int)0x8000 }; 2. Attribute Attribute定义了文件属性:正常、只读、隐含、系统文件,文件或者目录等。 enum Attribute { normal = 0x00, readOnly = 0x01, hidden = 0x02, system = 0x04, volume = 0x08, directory = 0x10, archive = 0x20 } 3. SeekPosition SeekPosition定义了三种文件位置:头、尾、当前: enum SeekPosition{ begin = 0x0, current = 0x1,
文件的创建、打开、关闭
/tutorial/mfc/mfc11.php(第 4/10 页)2006-2-18 15:45:04
MFC教程_ MFC下的文件类
√ √ √ √
Abort Duplicate Open Close
CloseHandle DuplicateHandle CreateFile CloseHandle
GetFileTime,GetFileSize等 FindFirstFile 不是简单地映射到某个函数
改名和删除 √ √ Rename Remove MoveFile DeleteFile 1. CFile的部分实现 这里主要讨论CFile对象的构造函数和文件的打开/创建的过程。 1. 构造函数 CFile有如下几个构造函数:
/tutorial/mfc/mfc11.php(第 7/10 页)2006-2-18 15:45:04
MFC教程_ MFC下的文件类
Open定义了一个局部的SECURITY_ATTRIBUTES变量sa,(nOpenFlags & 0x80)被赋值给sa. bInheritHandle。 (nOpenFlags & modeCreate)表示了创建方式,映射成变量dwCreateFlag,可以取值为Win32的 OPEN_ALWAYS、CREATE_ALWAYS、OPEN_EXISTING。 在生成了上述参数之后,先调用::CreateFile: HANDLE hFile =::CreateFile(lpszFileName, dwAccess, dwShareMode, &sa, dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL); 然后,hFile被赋值给成员变量m_hFile,m_bCloseOnDelete被设置为TRUE。 由上可以看出,CFile打开(创建)一个文件时大大简化了:: CreateFile函数的复杂性,即只需要指定 一个文件名、一个打开文件的参数即可。若该参数指定为0,则表示以只读方式打开一个存在的 文件,独占使用,不允许子进程继承。 在CFile对象使用时,如果它是在堆中分配的,则应该销毁它;如果在栈中分配的,则CFile对象将 被自动销毁。销毁时析构函数被调用,析构函数是虚拟函数。若m_bCloseOnDelete为真且m_hFile 非空,则析构函数调用Close关闭文件。 至于其他CFile成员函数的实现,这里不作分析了。 1. CFile的派生类 这里主要简要地介绍CStdioFile和CmemFile及CFileFind。 1. CStdioFile CStdioFile对文本文件进行操作。 CStdioFile定义了新的成员变量m_pStream,类型是FILE*。在打开或者创建文件时,使用 _open_osfhandle从m_hFile(Win32文件句柄)得到一个“C”的FILE类型的文件指针,然后, 在文件操作中,使用“C”的文件操作函数。例如,读文件使用_fread,而不是::ReadFile, 写文件使用了_fwrite,而不是::WriteFile,等等。m_hFile是CFile的成员变量。 另外,CStdioFile不支持CFile的Dumplicate、LockRange、UnlockRange操作,但是实现了两
/tutorial/mfc/mfc11.php(第 1/10 页)2006-2-18 15:45:04
MFC教程_ MFC下的文件类
1. CFile定义的枚举类型 CFile类定义了一些和文件操作相关的枚举类型,主要有四种:OpenFlags,Attribute, SeekPosition,hFileNull。下面,分别解释这些枚举类型。 1. OpenFlags OpenFlags定义了13种文件访问和共享模式: enum OpenFlags { //第一(从右,下同)至第二位,打开文件时访问模式,读/写/读写 modeRead = 0x0000, modeWrite = 0x0001, modeReadWrite = 0x0002, shareCompat = 0x0000, //32位MFC中没用 //第五到第七位,打开文件时的共享模式 shareExclusive = 0x0010,//独占方式,禁止其他进程读写 shareDenyWrite = 0x0020,//禁止其他进程写 shareDenyRead = 0x0030,//禁止其他进程读 shareDenyNone = 0x0040,//允许其他进程写 //第八位,打开文件时的文件继承方式 modeNoInherit = 0x0080,//不允许子进程继承 //第十三、十四位,是否创建新文件和创建方式 modeCreate = 0x1000,//创建新文件,文件长度0 modeNoTruncate = 0x2000,//创建新文件时如文件已存在则打开

CFile()
缺省构造函数,仅仅构造一个CFile对象,还必须使用Open成员函数来打开文件。
相关文档
最新文档