zoukankan      html  css  js  c++  java
  • MFC编程入门之十八(对话框:字体对话框)

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

      字体对话框的作用是用来选择字体。我们也经常能够见到。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 IStructSize;

        HWND hwndOwner;

        HDC hDC;

        LPLOGFONT lpLogFont;

        INT iPointSize;

        DWORD Flags;

        COLORREF rgbColors;

        LPARAM ICustData;

        LPCFHOOKPROC lpfnHook;

        LPCTSTR lpTemplateName;

        HINSTANCE hInstance;

        LPTSTR lpszStyle;

        WORD nFontType;

        INT nSizeMin;

        INT nSizeMax;

      } CHOOSEFONT, *LPCHOOSEFONT;

      CHOOSEFONT结构体有个成员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:Palce 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++代码:

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

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

  • 相关阅读:
    横冲直撞vue(第六篇):vue之过滤器、es6中填充字符串、es6新增的padStart()方法和padEnd()方法、vue自定义键盘修饰符、vue自定义全局指令
    leetcode的奇妙冒险(python3)系列:leetcode 283. Move Zeroes
    横冲直撞vue(第五篇):事件修饰符、指令系统综合案例
    横冲直撞vue(第四篇):v-model、指令系统总结、指令系统示例轮播图实现、指令系统示例跑马灯效果实现、在vue中使用样式的方式
    横冲直撞vue(第三篇):vue中template的三种写法、v-bind、v-on、更新元素的指令v-text与v-html、条件渲染指令v-if 与v-show、v-for
    横冲直撞vue(第二篇):什么是vue?框架和库的区别、vue的优点、vue的使用、使用vue实例化对象
    横冲直撞vue(第一篇):常用的ES6语法
    nodejs(第五篇):npm常用命令、包说明文件package.json、packjson-lock.json文件、使用nodemon插件、nrm的安装与使用
    最详细的个人博客教程搭建教程,最快5分钟快速搭建简约风格博客
    面试问了解Linux内存管理吗?10张图给你安排的明明白白!
  • 原文地址:https://www.cnblogs.com/mupiaomiao/p/6228718.html
Copyright © 2011-2022 走看看