• MFC笔记5


    1.MessageBox()             引用自(http://www.douban.com/note/40199603/)

    一 函数原型及参数
     function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
     hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
     Text:欲显示的信息字符串。
     Caption:对话框标题字符串。
     Type:对话框类型常量。
     该函数的返回值为整数,用于对话框按钮的识别。
     2、类型常量
     对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
     (1)按钮组合常量
     MB_OK = $00000000;         //一个确定按钮
     MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮
     MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮
     MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮
     MB_YESNO = $00000004;        //一个是按钮,一个否按钮
     MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮
     (2)缺省按钮常量
     MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮
     MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮
     MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮
     MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮
     (3)图标常量
     MB_ICONHAND = $00000010;        //“×”号图标
     MB_ICONQUESTION = $00000020;      //“?”号图标
     MB_ICONEXCLAMATION = $00000030;    //“!”号图标
     MB_ICONASTERISK = $00000040;      //“i”图标
     MB_USERICON = $00000080;        //用户图标
     MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
     MB_ICONERROR = MB_ICONHAND;      //“×”号图标
     MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
     MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
     (4)运行模式常量
     MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序
     MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作
     MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序
     MB_HELP = $00004000;       //Help Button
     3、函数返回值
     0            //对话框建立失败
     IDOK = 1        //按确定按钮
     IDCANCEL = 2      //按取消按钮
     IDABOUT = 3       //按异常终止按钮
     IDRETRY = 4       //按重试按钮
     IDIGNORE = 5      //按忽略按钮
     IDYES = 6        //按是按钮
     IDNO = 7        //按否按钮
    二 用法

    1. MessageBox("这是一个最简单的消息框!");
    2. MessageBox("这是一个有标题的消息框!","标题");
    3. MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL );
    4. MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );
    5. MessageBox("这是一个两种属性的消息框!","标题",
                  MB_ICONEXCLAMATION|MB_OKCANCEL );
    6. if(MessageBox("一种常用的应用","标题
                  " ,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
             return;
    注意:
    以上消息框的用法是在CWnd的子类中的应用,如果不是,则要MessageBox(NULL,"ddd","ddd",MB_OK); 或MessageBox(hWnd,"ddd","ddd",MB_OK); hWnd为某窗口的句柄,或者直接用AfxMessageBox。

    二、在MessageBox中显示变量的值

         CString string;

          string.format("%d%s",m_age, m_address); //将变量组装到字符串中

           MessageBox(string,"消息框标题",消息框类型);

     (http://www.jizhuomi.com/software/171.html具体学习参考)

    2.C、C++和MFC中文件的读写方法 引用自(http://www.cppblog.com/The-Moment/archive/2009/07/29/91556.html)

    对文件读写的三种方法
      1.C中
        FILE *pFile=fopen("1.txt","w");
    fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile");
    //fseek(pFile,0,SEEK_SET);
    //fwrite("ftp:",1,strlen("ftp:"),pFile);
    //fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile");
    fclose(pFile);*/
    //fflush(pFile);

    表头文件 #include<stdio.h> 

    FILE * fopen(const char * path,const char * mode); 
      函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 
      mode有下列几种形态字符串: 

    int fseek( FILE *stream, long offset, int origin );
      第一个参数stream为文件指针
      第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
      第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
      SEEK_CUR: 当前位置
      SEEK_END: 文件结尾
      SEEK_SET: 文件开头
      其中SEEK_CUR,SEEK_END和SEEK_SET依次为1,2和0

    :fwrite(buffer,size,count,fp);
      (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
      (2)size:要写入的字节数;
      (3)count:要进行写入size字节的数据项的个数;
      (4)fp:目标文件指针。

    int fread(void *ptr, int size, int nitems, FILE *stream);
      参 数:用于接收数据的地址(指针)(ptr) 
      单个元素的大小(size) 
      元素个数(nitems)
      提供数据的文件指针(stream)

    :int fflush(FILE *stream) 
             功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 

      2.C++中
    /* ofstream ofs("4.txt");
    ofs.write("http://www.sunxin.org",strlen("http://www.sunxin.org"));
    ofs.close();*/
             要包括头文件 "fstream.h"

      3.MFC中 用CFile类,哈哈!简单好用
    CFileDialog fileDlg(FALSE);
    fileDlg.m_ofn.lpstrTitle="我的文件保存对话框";
    fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)*.txtAll Files(*.*)*.*";
    fileDlg.m_ofn.lpstrDefExt="txt";
    if(IDOK==fileDlg.DoModal())
    {
      CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
      file.Write("http://www.sunxin.org",strlen("http://www.sunxin.org"));
      file.Close();
    }

      CFile操作详解 
      各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。
      1.文件的查找 
      当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。 
      CString strFileTitle; 
      CFileFind finder; 
      BOOL bWorking = finder.FindFile("C:\windows\sysbkup\*.cab"); 
      while(bWorking) 
      { 
      bWorking=finder.FindNextFile(); 
      strFileTitle=finder.GetFileTitle(); 
      } 
      2.文件的打开/保存对话框 
      让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。 
      在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。 
      CFileDialog mFileDlg(TRUE,NULL,NULL, 
      OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, 
      "All Files (*.*)|*.*||",AfxGetMainWnd()); 
      CString str(" ",10000); 
      mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000); 
      str.ReleaseBuffer(); 
      POSITION mPos=mFileDlg.GetStartPosition(); 
      CString pathName(" ",128); 
      CFileStatus status; 
      while(mPos!=NULL) 
      { 
      pathName=mFileDlg.GetNextPathName(mPos); 
      CFile::GetStatus( pathName, status ); 
      } 
      3.文件的读写 
      文件的读写非常重要,下面将重点进行介绍。文件读写的最普通的方法是直接使用CFile进行,如文件的读写可以使用下面的方法: 
      //对文件进行读操作 
      char sRead[2]; 
      CFile mFile(_T("user.txt"),CFile::modeRead); 
      if(mFile.GetLength()<2) 
      return; 
      mFile.Read(sRead,2); 
      mFile.Close(); 
      //对文件进行写操作 
      CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate); 
      mFile.Write(sRead,2); 
      mFile.Flush(); 
      mFile.Close(); 
      虽然这种方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大。首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例。 
      //对文件进行写操作 
      CString strTemp; 
      CFile mFile; 
      mFile.Open("d:\dd\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite); 
      CArchive ar(&mFile,CArchive::store); 
      ar<<strTemp; 
      ar.Close(); 
      mFile.Close(); 
      //对文件进行读操作 
      CFile mFile; 
      if(mFile.Open("d:\dd\try.TRY",CFile::modeRead)==0) 
      return; 
      CArchive ar(&mFile,CArchive::load); 
      ar>>strTemp; 
      ar.Close(); 
      mFile.Close(); 
      CArchive的 << 和>> 操作符用于简单数据类型的读写,对于CObject派生类的对象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()还可以进行类的读写,如: 
      //存储CAboutDlg类 
      ar.WriteClass(RUNTIME_CLASS(CAboutDlg)); 
      //读取CAboutDlg类 
      CRuntimeClass* mRunClass=ar.ReadClass(); 
      //使用CAboutDlg类 
      CObject* pObject=mRunClass->CreateObject(); 
      ((CDialog* )pObject)->DoModal(); 
      虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,因此虽然很多VC入门的书上花费大量篇幅讲述文档/视结构,但我建议你最好不要使用它的文档。关于如何进行文档/视的分离有很多书介绍,包括非常著名的《Visual C++ 技术内幕》。 
      如果你要进行的文件操作只是简单的读写整行的字符串,我建议你使用CStdioFile,用它来进行此类操作非常方便,如下例。 
      CStdioFile mFile; 
      CFileException mExcept; 
      mFile.Open( "d:\temp\aa.bat", CFile::modeWrite, &mExcept); 
      CString string="I am a string."; 
      mFile.WriteString(string); 
      mFile.Close(); 
      4.临时文件的使用 
      正规软件经常用到临时文件,你经常可以会看到C:WindowsTemp目录下有大量的扩展名为tmp的文件,这些就是程序运行是建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,你就可以用它来建立并操作文件了,如: 
      char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH]; 
      GetTempPath(_MAX_PATH, szTempPath); 
      GetTempFileName(szTempPath,_T ("my_"),0,szTempfile); 
      CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite); 
      char m_char='a'; 
      m_tempFile.Write(&m_char,2); 
      m_tempFile.Close(); 
      5.文件的复制、删除等 
      MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它们的用法很简单,可参考MSDN。
     

      1,判断文件是否存在
      access(filename,mode);
      2,对于不同用途又不同的文件操作,其中API函数CreateFile()也是比较有用处理方式,对于巨型文件很合适的其他的楼上的大都说了,不重复了.
      [1]显示对话框,取得文件名
      CString FilePathName;
      CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为S***E AS对话框
      if (dlg.DoModal() == IDOK)
      FilePathName=dlg.GetPathName();
      相关信息:CFileDialog 用于取文件名的几个成员函数:
      假如选择的文件是C:WINDOWSTEST.EXE
      则(1)GetPathName();取文件名全称,包括完整路径。取回C:WINDOWSTEST.EXE
      (2)GetFileTitle();取文件全名:TEST.EXE
      (3)GetFileName();取回TEST
      (4)GetFileExt();取扩展名EXE
      [2]打开文件
      CFile file("C:HELLO.TXT",CFile::modeRead);//只读方式打开
      //CFile::modeRead可改为 CFile::modeWrite(只写),
      //CFile::modeReadWrite(读写),CFile::modeCreate(新建)
      例子:
      {
      CFile file;
      file.Open("C:HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);
      }
      [3]移动文件指针
      file.Seek(100,CFile::begin);///从文件头开始往下移动100字节
      file.Seek(-50,CFile::end);///从文件末尾往上移动50字节
      file.Seek(-30,CFile::current);///从当前位置往上移动30字节
      file.SeekToBegin();///移到文件头
      file.SeekToEnd();///移到文件尾
      [4]读写文件
      读文件:
      char buffer[1000];
      file.Read(buffer,1000);
      写文件:
      CString string("自强不息");
      file.Write(string,8);
      [5]关闭文件
      file.Close(); 

      HANDLE CreateFile(
      LPCTSTR lpFileName, //指向文件名的指针
      DWORD dwDesiredAccess, //访问模式(写/读)
      DWORD dwShareMode, //共享模式
      LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
      DWORD dwCreationDisposition, //如何创建
      DWORD dwFlagsAndAttributes, //文件属性
      HANDLE hTemplateFile //用于复制文件句柄
      );
      参数列表 
      lpFileName String 要打开的文件的名字 
      dwDesiredAccess Long 如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息 
      dwShareMode Long, 零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问
      lpSecurityAttributes SECURITY_ATTRIBUTES, 指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)
      dwCreationDisposition Long,下述常数之一: 
      CREATE_NEW 创建文件;如文件存在则会出错 
      CREATE_ALWAYS 创建文件,会改写前一个文件 
      OPEN_EXISTING 文件必须已经存在。由设备提出要求 
      OPEN_ALWAYS 如文件不存在则创建它 
      TRUNCATE_EXISTING 讲现有文件缩短为零长度 
      dwFlagsAndAttributes Long, 一个或多个下述常数 
      FILE_ATTRIBUTE_ARCHIVE 标记归档属性 
      FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式 
      FILE_ATTRIBUTE_NORMAL 默认属性 
      FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录 
      FILE_ATTRIBUTE_READONLY 文件为只读 
      FILE_ATTRIBUTE_SYSTEM 文件为系统文件 
      FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作 
      FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作 
      FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块 
      FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化 
      FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化 
      FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件

  • 相关阅读:
    MySQL设计之三范式的理解
    git基本操作命令和安装
    MySQL 中<=>用法(长知识)
    举个栗子看如何做MySQL 内核深度优化
    我们来说一说TCP神奇的40ms
    一览js模块化:从CommonJS到ES6
    Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴
    做优化的数据库工程师请参考!CynosDB的计算层设计优化揭秘
    1个开发如何撑起一个过亿用户的小程序
    教你一个vue小技巧,一般人我不说的
  • 原文地址:https://www.cnblogs.com/zhangerxiaoma/p/4999771.html
Copyright © 2020-2023  润新知