《VisualC文档内容显示及字体改变代码》由会员分享,可在线阅读,更多相关《VisualC文档内容显示及字体改变代码(4页珍藏版)》请在金锄头文库上搜索。
1、【例 Ex_Text】显示文档内容并改变显示的字体 用 MFC AppWizard(exe)创建一个单文档应用程序Ex_Text,在创建向导的第 6步将视图的基类选择为CScrollView。由于视图客户区往往显示不了文档的全部内容,因此需要视图支持滚动操作。 为 CEx_TextDoc类添加 CStringArray类型的成员变量m_strContents,用来将读取的文档内容保存。 在 CEx_TextDoc:Serialize函数中添加读取文档内容的代码:void CEx_TextDoc:Serialize(CArchive& ar)if (ar.IsStoring().else CSt
2、ring str;m_strContents.RemoveAll();while (ar.ReadString(str) m_strContents.Add(str); 为 CEx_TextView类添加 LOGFONT类型的成员变量m_lfText,用来保存当前所使用的逻辑字体。并在CEx_TextView类构造函数中添加 m_lfText的初始化代码:CEx_TextView:CEx_TextView()memset(&m_lfText, 0, sizeof(LOGFONT);m_lfText.lfHeight = -12;m_lfText.lfCharSet = GB2312_CHARS
3、ET;strcpy(m_lfText.lfFaceName, 宋体); 用 MFC ClassWizard为 CEx_TextView类添加WM_LBUTTONDBLCLK(双击鼠标左键)的消息映射函数,并增加下列代码:void CEx_TextView:OnLButtonDblClk(UINT nFlags, CPoint point) CFontDialog dlg(&m_lfText);if (dlg.DoModal() = IDOK) dlg.GetCurrentFont(&m_lfText);Invalidate();CScrollView:OnLButtonDblClk(nFlag
4、s, point); 这样,当双击鼠标左键后,就会弹出字体对话框,从中可改变字体的属性,单击确定按钮后,执行 CEx_TextView:OnDraw中的代码。 在 CEx_TextView:OnDraw中添加下列代码:void CEx_TextView:OnDraw(CDC* pDC)CEx_TextDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ 创建字体CFont cf;cf.CreateFontIndirect(&m_lfText);CFont* oldFont = pDC-SelectObject(&cf);/ 计算每行高度TEXTMETRI
5、C tm;pDC-GetTextMetrics(&tm);int lineHeight = tm.tmHeight + tm.tmExternalLeading;int y = 0;int tab = tm.tmAveCharWidth * 4; / 为一个 TAB设置 4个字符/ 输出并计算行的最大长度int lineMaxWidth = 0;CString str;CSize lineSize(0,0);for (int i=0; im_strContents.GetSize(); i+) str = pDoc-m_strContents.GetAt(i);pDC-TabbedTextOu
6、t(0, y, str, 1, &tab, 0);str = str + A; / 多计算一个字符宽度lineSize = pDC-GetTabbedTextExtent(str, 1, &tab);if ( lineMaxWidth SelectObject(oldFont);/ 多算一行,以滚动窗口能全部显示文档内容int nLines = pDoc-m_strContents.GetSize() + 1;CSize sizeTotal;sizeTotal.cx = lineMaxWidth;sizeTotal.cy = lineHeight * nLines;SetScrollSizes(MM_TEXT, sizeTotal);/ 设置滚动逻辑窗口的大小 编译运行并测试,打开任意一个文本文件,结果如图 14.4所示。图 14.4 Ex_Text 运行结果