VS2019/MFC编程入门:字体对话框

在上一节为大家讲解了文件对话框的使用,本节则主要介绍字体对话框如何应用。字体对话框的作用是用来选择字体。我们也经常能够见到。MFC使用CFontDialog类封装了字体对话框的所有操作。字体对话框也是一种模态对话框。

在上一节为大家讲解了文件对话框的使用,本节则主要介绍字体对话框如何应用。

字体对话框的作用是用来选择字体。我们也经常能够见到。MFC使用CFontDialog类封装了字体对话框的所有操作。字体对话框也是一种模态对话框。

VS2019/MFC编程入门:字体对话框

CFontDialog类的构造函数

我们先来了解CFontDialog类。它的常用构造函数原型如下:

CFontDialog(
LPLOGFONT lplfInitial = NULL,
DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,
CDC* pdcPrinter = NULL,
CWnd* pParentWnd = NULL
);

参数说明:

lplfInitial:指向LOGFONT结构体数据的指针,可以通过它设置字体的一些特征。

dwFlags:指定选择字体的一个或多个属性,详情可在MSDN中查阅。

pdcPrinter:指向一个打印设备上下文的指针。

pParentWnd:指向字体对话框父窗口的指针。

上面的构造函数中第一个参数为LOGFONT指针,LOGFONT结构体中包含了字体的大部分特征,包括字体高度、宽度、方向、名称等等。下面是此结构体的定义:

typedef struct tagLOGFONT {LONG lfHeight;LONG lfWidth;LONG lfEscapement;LONG lfOrientation;LONG lfWeight;BYTE lfItalic;BYTE lfUnderline;BYTE lfStrikeOut;BYTE lfCharSet;BYTE lfOutPrecision;BYTE lfClipPrecision;BYTE lfQuality;BYTE lfPitchAndFamily;TCHAR lfFaceName[LF_FACESIZE];} LOGFONT;

获取字体对话框中所选字体

我们在字体对话框中选择了字体后,如何获取选定的字体呢们可以通过CFontDialog类的成员变量m_cf间接获得选定字体的CFont对象。m_cf是CHOOSEFONT类型的变量,CHOOSEFONT结构体定义如下:

typedef struct {DWORD lStructSize;HWND hwndOwner;HDC hDC;LPLOGFONT lpLogFont;INT iPointSize;DWORD Flags;COLORREF rgbColors;LPARAM lCustData;LPCFHOOKPROC lpfnHook;LPCTSTR lpTemplateName;HINSTANCE hInstance;LPTSTR lpszStyle;WORD nFontType;INT nSizeMin;INT nSizeMax;} CHOOSEFONT, *LPCHOOSEFONT;

CHOOSEFON结构体中有个成员lpLogFont,它是指向LOGFONT结构体变量的指针,就像上面所说,LOGFONT中包含了字体特征,例如,我们可以通过LOGFONT的lfFaceName得知字体名。

我们最终要获得的是所选择字体的CFont对象,有了字体的LOGFONT怎样获得对应的CFont对象呢用CFont类的成员函数CreateFontIndirect可以达到此目的。函数原型如下:

BOOL CreateFontIndirect(const LOGFONT* lpLogFont );

参数是LOGFONT指针类型,我们可以传入CFontDialog类成员变量m_cf的lpLogFont成员,就可以得到所选字体的CFont对象了。

字体对话框应用实例

以下是创建此实例的步骤:

1.创建一个基于对话框的MFC工程,名字为“Example18”。

4.为按钮IDC_FONT_BUTTON添加点击消息的消息处理函数CExample18Dlg::OnBnClickedFontButton()。

5.修改消息处理函数CExample18Dlg::OnBnClickedFontButton()如下:

C++代码

VS2010/MFC编程入门之十八(对话框:字体对话框)

到此,我们又学会了字体对话框的使用,对于以后在界面开发中控制显示的字体很有帮助。有问题欢迎在鸡啄米留言。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月4日
下一篇 2021年1月4日

相关推荐

发表回复

登录后才能评论