📄 05.4.1 设置字体.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 + -