2.5.6 使用MFC/ATL
MFC更多的工作在于:它们将Widnows API函数包装成对象类及其成员函数。MFC的这种中间位置与标准C++(www.cppentry.com)很类似,只不过它仅用于Windows操作系统,MFC的位置如图2-54所示。
比如,针对文件的操作,MFC就封装了CFile类,CFile的UML类图简略如图2-55所示。
|
| (点击查看大图)图2-54 MFC/ATL的位置 |
|
| 图2-55 MFC封装的CFile类 |
如果我们再较真一点地话,就可以通过调试等手段进入到CFile::Remove()函数的定义,来观察CFile的庐山真面目:- void PASCAL CFile::Remove(LPCTSTR lpszFileName)
- {
- if (!::DeleteFile((LPTSTR)lpszFileName))
- CFileException::ThrowOsError((LONG)::GetLastError(),
- lpszFileName);
- }
原来如此!MFC提供的CFile,其Remove()函数实际上就是简单的调用一下Windows API"DeleteFile()"而已!
现在动手
使用MFC进行Windows编程(www.cppentry.com),不再是一种痛苦,如下即为使用CFile操作文件的例子,为了让我们的控制台程序支持MFC,请参考2.4.2小节"让控制台程序支持MFC/ATL"。
【程序 2-16】使用CFile输出茴字
- 01 #include "stdafx.h"
- 02
- 03 #include <afx.h>
- 04
- 05 int main()
- 06 {
- 07
- 08 CFile file;
- 09 if(file.Open(_T("test.out"), CFile::modeCreate | CFile::modeWrite))
- 10 {
- 11 char line[256] = "茴香豆的茴";
- 12 file.Write(line, sizeof(line));
- 13 file.Close();
- 14 }
- 15
- 16
- 17 if(file.Open(_T("test.out"), CFile::modeRead))
- 18 {
- 19 char line[256];
- 20 if(file.Read(line, 256) != 0)
- 21 {
- 22 printf("%s\r\n", line);
- 23 }
- 24
- 25 file.Close();
- 26 }
- 27
- 28 return 0;29 }
使用MFC类,传统的面向函数的编程(www.cppentry.com)接口即转换成MFC类对象的接口,这样一来,代码的安全性和可读性得以大大提高。
光盘导读
该项目对应于光盘中的目录"\ch02\ MfcFileWriter"。
【责任编辑:
云霞 TEL:(010)68476606】