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

您所在的位置:网站首页 mfc字体对话框 VS2010/MFC编程入门之十八(对话框:字体对话框)

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

2024-07-12 22:31:14| 来源: 网络整理| 查看: 265

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

       字体对话框的作用是用来选择字体。我们也经常能够见到。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结构体中包含了字体的大部分特征,包括字体高度、宽度、方向、名称等等。下面是此结构体的定义:

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”。

       2.在自动生成的主对话框IDD_EXAMPLE18_DIALOG的模板中,删除“TODO: Place dialog controls here.”静态文本框,添加一个按钮,ID设为IDC_FONT_BUTTON,Caption设为“字体选择”,用于显示字体对话框来选择字体,再添加一个编辑框,ID设为IDC_FONT_EDIT,用来以所选字体显示字体名字符串。

       3.在Example18Dlg.h中为CExample18Dlg类添加private成员变量:CFont m_font;,用来保存编辑框中选择的字体。

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

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

C++代码 void CExample18Dlg::OnBnClickedFontButton()    {        // TODO: Add your control notification handler code here        CString strFontName;    // 字体名称        LOGFONT lf;             // LOGFONT变量           // 将lf所有字节清零        memset(&lf, 0, sizeof(LOGFONT));           // 将lf中的元素字体名设为“宋体”        _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋体"));                // 构造字体对话框,初始选择字体名为“宋体”        CFontDialog fontDlg(&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编程入门之十八(对话框:字体对话框)

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

除非特别注明,鸡啄米文章均为原创 转载请标明本文地址:http://www.jizhuomi.com/software/175.html 2012年5月13日 作者:鸡啄米 分类:软件开发 浏览: 评论:34


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭