教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 公文资料 >

VS2010和MFC编程入门之18(对话框:字体对话框)

来源:网络收集 时间:2026-08-12
导读: VS2010和MFC编程入门之18(对话框:字体对话框) VS2010MFC编程入门之十八(对话框:字体对话框) 了解了文件对话框的使用,这里则主要介绍字体对话框如何应用。 字体对话框的作用是用来选择字体。我们也经常能够见到。MFC使用CFontDialog类封装了字体对话框的

VS2010和MFC编程入门之18(对话框:字体对话框)

VS2010MFC编程入门之十八(对话框:字体对话框) 了解了文件对话框的使用,这里则主要介绍字体对话框如何应用。

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

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结构体中包含了字体的大部分特征,包括字体高度、宽度、方向、名称等等。下面是此结构体的定义:

typedefstructtagLOGFONT {

VS2010和MFC编程入门之18(对话框:字体对话框)

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结构体定义如下:

typedefstruct {

DWORD lStructSize;

HWND hwndOwner;

HDC hDC;

LPLOGFONT lpLogFont;

INT iPointSize;

DWORD Flags;

COLORREF rgbColors;

VS2010和MFC编程入门之18(对话框:字体对话框)

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对象了。

字体对话框应用实例

鸡啄米给大家做一个字体对话框的实例。先介绍此实例要实现的功能,生成一个对话框,对话框中放置一个“字体选择”按钮和一个编辑框。点击“字体选择”按钮将弹出字体对话框。编辑框用于显示所选字体名,并以选定的字体来显示字体名字符串,例如,如果选择了宋体,则在编辑框中以宋体显示字符串“宋体”。

VS2010和MFC编程入门之18(对话框:字体对话框)

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

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

2.在自动生成的主对话框IDD_EXAMPLE18_DIALOG的模板中,删除“TODO: Place dialog controls here.”静态文本框,添加一个按钮,ID设为

IDC_FONT_BUTTON,Caption设为“字体选择”,用于显示字体对话框来选择字体,再添加一个编辑框,ID设为IDC_FONT_EDIT,用来以所选字体显示字体名字符串。

3.在Example18Dlg.h中为CExample18Dlg类添加private成员变量:

CFontm_font;,用来保存编辑框中选择的字体。

4.为按钮IDC_FONT_BUTTON添加点击消息的消息处理函数

CExample18Dlg::OnBnClickedFontButton()。

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

C++代码

void CExample18Dlg::OnBnClickedFontButton()

{

// TODO: Add your control notification handler code here

CStringstrFontName; // 字体名称

LOGFONT lf; // LOGFONT变量

// 将lf所有字节清零

memset(&lf, 0, sizeof(LOGFONT));

VS2010和MFC编程入门之18(对话框:字体对话框)

// 将lf中的元素字体名设为“宋体”

_tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋体"));

// 构造字体对话框,初始选择字体名为“宋体”

CFontDialogfontDlg(&lf);

if (IDOK == fontDlg.DoModal()) // 显示字体对话框

{

// 如果m_font已经关联了一个字体资源对象,则释放它

if (m_font.m_hObject)

{

m_font.DeleteObject();

}

// 使用选定字体的LOGFONT创建新的字体

m_font.CreateFontIndirect(fontDlg.m_cf.lpLogFont);

// 获取编辑框IDC_FONT_EDIT的CWnd指针,并设置其字体

GetDlgItem(IDC_FONT_EDIT)->SetFont(&m_font);

// 如果用户选择了字体对话框的OK按钮,则获取被选择字体的名称并显示到编辑框里

strFontName = fontDlg.m_cf.lpLogFont->lfFaceName;

SetDlgItemText(IDC_FONT_EDIT, strFontName);

}

}

6.最后,编译运行程序。显示结果对话框,点击“字体选择”按钮,将弹出字体对话框,默认选择为“宋体”,我们改而选择“华文彩云”字体点“确定”,编辑框中会像如下显示:

VS2010和MFC编程入门之18(对话框:字体对话框)

到此,我们又学会了字体对话框的使用,对于以后在界面开发中控制显示的字体很有帮助。

…… 此处隐藏:1503字,全部文档内容请下载后查看。喜欢就下载吧 ……
VS2010和MFC编程入门之18(对话框:字体对话框).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/708920.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)