友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第53部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


直观的想法。  



要在程序中使用MFC模板类,需要添加头文件afxtempl。h,由于在整 

个过程中我们都  没有必要去修改这个头文件 (并且,我们也不建议您 

去修改这个头文件),所以我们可以把它添加工程TextViewer的预编 

译头文件StdAfx。h中。这样做还可以获得额外的好处,就是没有必要 

对每一个包含了StdAfx。h头文件的源文件都添加  



#include   



一行。由于由AppWizard和ClassWizard生成的文件大多添加了下面的 

代码:  



#include   



因此,我们就可以避免为每一个需要使用模板的源文件都手动的添加 

对afxtempl。h的包含。  



完成这一步之后,在CTextDoc的定义中添加下面的代码:  



public:  



CArray  m_text;  



从CArray模板生成指定类型的元素的数组的语法为  



CArray  myArray;  



其中使用到了两个参数,第一个参数TYPE为数组类所存储的元素类 

型,可以指定的元素类型包括:基本C++数据类型、C++结构和类以及 

其它的用户自定义类型。第二个参数指定在函数参数传递中的使用的 

数据类型,对于结构和类类型的元素,我们一般都将ARG_TYPE参数设 

置为对TYPE参数指定的数据的引用,如上面的例子。把函数参数指定 

为对数据的引用可以生成更有效的代码,这对于在集合类中使用大的 

类对象非常有意义。  



在本示例中使用向集合类中添加元素是在文档的串行化时进行的。按 

下面的代码重载类CTextDoc的Serialize成员函数:  


…………………………………………………………Page 447……………………………………………………………

/////////////////////////////////////////////////////////////  



// CTextDoc 串行化  



void CTextDoc::Serialize(CArchive& ar)  



 {  



CString str;  



if (ar。IsStoring())  



 {  



for (int i=0; i” 

运算符将得不到正确的结果;出于同样的原因,如果是使用                   “GetTextMetrics(&tm);  



// 获得当前客户区的大小  



CRect rect;  



GetClientRect(&rect);  



pDC…》DPtoLP(&rect);  



// 每行平均字符数  



int cpl=rect。Width()/tm。tmAveCharWidth;  



// 每行字符高度  



int h=int(tm。tmHeight*1。5);  



int cl=0; // 所显示的总行数; 用来计算文本的输出位置  



for (int i=0; iGetTabbedTextExtent(pHead;   



int(pCur…pHead); 0; NULL)。cx》rect。Width())  



{  



pCur=_tcsdec(pHead;pCur);  



}  



// 在客户区绘制文本  



pDC…》TabbedTextOut(0; (cl++)*h;   



pHead; int(pCur…pHead); 0; NULL; 0);  



}  



pHead=pCur;  



}while(pCur
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!