友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
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
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!