⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 05.4.1 设置字体.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
5.4.1 设置字体 
MFC提供了一个 CFont类专门用来设置字体。这个类派生于 CGdiObject类,封装了
一个Windows图形设备接口 (GDI)的字体。在实际编程时,在构造了一个 CFont对象后,还必须利用该类提供的几个初始化函数之一对该对象进行初始化,然后才能使用这个对象。 CFont类提供的初始化函数有: 
. CreateFont 

. CreateFontIndirect 

. CreatePointFont 

. CreatePointFontlndirect 


这些初始化函数的作用主要是将CFont这个C++对象与字体资源关联起来。本例将使用 CreatePointFont这个初始化函数,其声明形式如下所示。 
BOOL CreatePointFont ( int nPointSize, LPCTSTR lpszFaceName , CDC* pOC = NULL ) ; 
该函数带有三个参数,各个参数的含义如下所述。 
. nPointSize 
设置将要创建的字体的高度,单位是一个点的十分之一。例如,如果该参数值为 120,那么就是要求创建一个 12个点的字体。 
. lpszFaceName 
字体的名称,就像 Word中使用的"楷体"、"宋体"这些字体名称一样。在 VC++开发环境中,可以看到这些字体的名称,方法是单击【Tools】菜单下的【Options】菜单命令,这时会弹出 Options对话框,该对话框的最右边是一个 Fonnat选项卡,该选项卡的界面如图 5.20所示。在该选项卡的Font下拉列表中就列出了所有可用的字体名称。但是, VC I I开发环境支持的字体比较少,我们可以在机器的系统目录下看到系统己安装的所有字体。笔者的机器安装的是Wmdows 2∞0,系统目录是WINNT,如果读者的机器安装的是Windows饨的话,系统目录应是Windows。在系统目录下有一个 Fonts目录,该目录下列出的内容就是操作系统已安装的字体。我们编写的程序并不能够对所有这些字体提供支持,程序支持哪些字体,需要通过试验才能知道。 

. pDC 
这是一个CDC对象的指针,用来把 nPointSize中指定的高度转换为逻辑单位。如果其值为空,就使用→个屏幕设备描述表来完成这种转换。
在程序中,与其他 GDI对象一样,当创建了一个字体对象并初始化后,还必须将它选入设备描述表,之后这个新字体才能发挥作用。这可以利用 CDC类的 SelectObject函数来实现,同样,该函数会返回先前的字体,我们可以保存这个字体,在使用完新字体后,再把设备描述表中的字体恢复为先前的字体。
在 OnChar函数中添加了字体的设置之后,该函数完整的代码如例 5-16所示,其中灰色部分就是设置字体所需的代码。 
void CTextView : :OnChar(UINT nChar , UINT nRepC口t, UINT nFlags) 
// TODO : Add your message handler code here and/ or call default CClientDC dc(this) : CFont font: font . CreatePointFont(300 , "华文行楷" , NULL) : CFont *pOldFont = dc . SelectObject(&font): TEXTMETRIC tm: dc.GetTextMetrics(&tm) : if( OxOd --nChar) 
m_strLine . Empty() : 
m-ptOrigin .y += tm. t mHeight: 

else if( Ox08 nChar) 
COLORREF clr = dc.SetTextColor(dc . GetBkColor()): dc . TextOut(m-ptOrigin.x , m-ptOrigin.y , m_strLine) : m_ strLine = m_ strLine.Left(m_strLine .GetLength() -1): dc . SetTextColor(clr) : 
} 
else 

m_strLine += nChar : 
CSize sz = dc .GetTextExtent(m_strLine): 
CPoint pt : 
pt .x = m-ptOrigin.x + sz .cx: 
pt.y = m-ptOrigin . y : 
SetCaretPos(pt) : 

dc . TextOut(m-ptOrigin . x , m-ptOrigin.y , m_strLine) : 
dc.SelectObject(pOldFont); 
CView : :OnChar(nChar, nRepCnt , nFlags); 

重新 Build并运行 Text程序,试着在程序窗口中输入文字看看效果,我们会发现字体
改变了。程序运行结果如图 5.21所示。 
当然,这里创建的这个文本程序功能很简单,如果要实现一个功能完整的字处理程序的话,所要做的工作还有很多。 MFC提供了 CEditView和 CRichEditView这两个类,可以用来帮助我们实现功能强大的字处理程序,其中,后者提供的功能比前者更为强大。如果让程序的视类直接派生于这两个类之一的话,程序就已经具备字处理程序的一些基本功能,例如输出字符、回车键的功能,还有一些简单的编辑功能。因此,读者以后如果要实现字处理程序的话,可以让程序的视类直接派生于这两个类中的其中之一即可。、 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -