MFC——文本字体操作

一、简述

  • 本博文记录 MFC 框架处理文本字体的学习笔记。

1、准备步骤

  • 用 Visual Studio(本人的是 Visual Studio 2017)新建一个 MFC 应用项目,配置为单文本视图,样式和主题由个人爱好,应用后缀选择以“view”结尾,默认是App。
  • 接着用 资源视图展开项目的资源,并且用可视化菜单编辑器打开“菜单”视图,添加菜单及其相关菜单项,如下图所示:
  • 并设置好相关菜单项的 ID。

2、简单示例

  • 展开“解决方案资源管理器”并且打开形式如“项目名称view.cpp"的源文件,找到 OnDraw函数体,编辑如下代码:

    void CFontEffectsSampleView::OnDraw(CDC* pDC){CFontEffectsSampleDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码AfxGetMainWnd()->SetWindowText("字体效果测试程序");CRect rc;GetClientRect(&rc);TEXTMETRIC tm;pDC->GetTextMetrics(&tm);pDC->SetTextAlign(TA_CENTER | TA_TOP);CString strText;strText.Format("字体高度=%d  字体宽度=%d  斜体=%d  下划线=%d 删除线=%d", tm.tmHeight, tm.tmWeight, tm.tmItalic, tm.tmUnderlined, tm.tmStruckOut);pDC->TextOut((rc.left + rc.right) / 2, 0, strText);}
    
  • 效果如下图:

二、字体效果

1、空心字体效果

  • 在 Visual Studio 编辑器中使用快捷键“Ctrl+Shift+X”代开如下图类向导,并且将将类名改为“**view”的类:
  • 找到之前编辑好的菜单项“设计空心字体”的ID,点击然后在消息框选择“command"消息,在点击”添加消息处理函数“按钮,在点击”编辑代码“,编辑如下代码:
    void CFontEffectsSampleView::OnMenuKongxinFont()
    {// TODO: 在此添加命令处理程序代码CClientDC dc(this);       //获得当前对话框的客户区设备上下文句柄LOGFONT lf; //更改当前字体dc.GetCurrentFont()->GetLogFont(&lf);CFont font; //保存设备上下文最初使用的字体对象lf.lfCharSet = 134;lf.lfHeight = -80;lf.lfWidth = 0;strcpy_s(lf.lfFaceName, "华文行楷");     font.CreateFontIndirect(&lf);       //创建字体CFont *pOldFont = dc.SelectObject(&font);    //装载字体dc.SetBkMode(TRANSPARENT);    //设置当前字体的模式为透明CPen pen(PS_SOLID, 2, RGB(255, 50, 0));   //更改当前画笔CPen *pOldPen = dc.SelectObject(&pen); //装载画笔dc.BeginPath();       //开始绘制dc.TextOutA(10, 10, "这里是空心字体效果示例"); //第一二个参数为文本输出位置x ydc.EndPath();     //结束绘制dc.StrokePath();dc.SelectObject(pOldFont);        //回复设备上下文的原有设置dc.SelectObject(pOldPen);         //回复画笔
    }
    
  • 效果如下图:

2、渐变字体效果

  • 步骤和上面类似,只不过编辑的是菜单项“渐变颜色的字体”的实现代码,代码如下:

    void CFontEffectsSampleView::OnMenuitemJianbianFont() //渐变颜色字体的实现
    {// TODO: 在此添加命令处理程序代码CClientDC dc(this);LOGFONT lf;dc.GetCurrentFont()->GetLogFont(&lf);CFont font, *pOldFont;lf.lfCharSet = 134;lf.lfHeight = -50;lf.lfWidth = 0;strcpy_s(lf.lfFaceName, "华文行书");font.CreateFontIndirect(&lf);pOldFont = dc.SelectObject(&font);dc.SetBkMode(HTTRANSPARENT);CPen pen(PS_NULL, 1, RGB(0, 0, 255));CPen *pOldPen = dc.SelectObject(&pen);CBrush br, *pOldBrush;pOldBrush = dc.SelectObject(&br);dc.BeginPath();dc.TextOut(10, 70, "这里是渐变颜色字体示例");dc.EndPath();dc.SelectClipPath(RGN_COPY);for (int i = 255; i > 0; i--){int iRadius = (600 * i) / 255;dc.SelectObject(pOldBrush);br.DeleteObject();br.CreateSolidBrush(RGB(i, i, i));dc.SelectObject(&br);dc.Ellipse(-iRadius, -iRadius / 3, iRadius, iRadius / 3);}dc.SelectObject(pOldFont);dc.SelectObject(pOldPen);dc.SelectObject(pOldBrush);
    }
    
  • 效果如下图:

3、旋转字体

  • 旋转字体的实现代码如下:

    //旋转字体实现
    void CFontEffectsSampleView::OnMenuitemRotateFont()
    {// TODO: 在此添加命令处理程序代码CClientDC dc(this);LOGFONT lf;lf.lfHeight = 50;lf.lfWidth = 0;lf.lfEscapement = 500;       // 倾斜30°,十分之一度为单位lf.lfOrientation = 0;lf.lfItalic = false;lf.lfUnderline = false;lf.lfStrikeOut = false;lf.lfCharSet = GB2312_CHARSET;strcpy_s(lf.lfFaceName, "行书");CFont font;font.CreateFontIndirect(&lf);CFont *pOldFont = dc.SelectObject(&font);dc.SetBkMode(TRANSPARENT);dc.SetTextColor(RGB(0, 255, 0));dc.TextOut(10, 360, "旋转字体示例");dc.SelectObject(pOldFont);
    }
    

4、3D字体

  • 3D 字体示例代码如下:

    void CFontEffectsSampleView::OnMenuitem3dFont()
    {// TODO: 在此添加命令处理程序代码CClientDC dc(this);LOGFONT lf;lf.lfHeight = 50;lf.lfWidth = 0;lf.lfEscapement = 0;lf.lfOrientation = 0;lf.lfWeight = FW_HEAVY;lf.lfItalic = false;lf.lfUnderline = false;lf.lfStrikeOut = false;lf.lfCharSet = GB2312_CHARSET;strcpy_s(lf.lfFaceName, "隶书");CFont font;font.CreateFontIndirect(&lf);CFont *pOldFont = dc.SelectObject(&font);dc.SetBkMode(TRANSPARENT);dc.SetTextColor(::GetSysColor(COLOR_3DDKSHADOW));CString text = "这里是3D字体示例";CRect rc;GetClientRect(&rc);dc.BeginPath();//绘制内容dc.DrawText(text, rc, DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_CENTER);dc.SetTextColor(::GetSysColor(COLOR_3DHILIGHT));   //设置文本颜色//绘制阴影文本内容dc.DrawText(text, rc + CPoint(2, 2), DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_CENTER);dc.EndPath();dc.StrokePath();dc.SelectObject(pOldFont);
    }
    

5、效果展示

  • 上述示例的效果如下图:

MFC——文本字体操作相关推荐

  1. MFC使用ADO操作数据库

    MFC使用ADO操作数据库 1. ADO概述 ADO是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口.ADO使您能够编写应用程序以通过OLE. DB ...

  2. [视频]MAC中如何单独放大文本字体

    我们知道使用MAC触控板的双指合拢手势可以进行放大或缩小操作,但其对应的是整个界面内容的放大及缩小,如果仅对其文本内容进行放大或缩小,可使用快捷键进行操作. 默认的 "Command&quo ...

  3. python使用matplotlib可视化、使用rcParams参数调整可视化图像中线条宽度、线条类型、文本字体、字体大小、字体颜色、字体类型、文本颜色等

    python使用matplotlib可视化.使用rcParams参数调整可视化图像中线条宽度.线条类型.文本字体.字体大小.字体颜色.字体类型.文本颜色等 目录

  4. python使用matplotlib可视化:设置坐标轴的范围、设置主次坐标轴刻度、坐标轴刻度显示样式、坐标轴刻度数颜色、小数点位数、坐标轴刻度网格线、线条类型、数据点形状标签、文本字体、颜色、大小等

    python使用matplotlib可视化:设置坐标轴的范围.设置主次坐标轴刻度.坐标轴刻度显示样式.坐标轴刻度数颜色.小数点位数.坐标轴刻度网格线.线条类型.数据点形状标签.文本字体.颜色.大小等 ...

  5. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  6. R语言可视化包ggplot2改变图例(legend)元素的大小实战:包含图例中标题字体、文本字体、标识模块(key)的大小

    R语言可视化包ggplot2改变图例(legend)元素的大小实战:包含图例中标题字体.文本字体.标识模块(key)的大小 目录

  7. css3-2 CSS3选择器和文本字体样式

    css3-2   CSS3选择器和文本字体样式 一.总结 一句话总结:是要记下来的,记下来可以省很多事. 1.css的基本选择器中的:first-letter和:first-line是什么意思? :f ...

  8. Css颜色和文本字体

    Css颜色,文本字体 css颜色表示法 颜色名表示,比如:red 红色,gold 金色 16进制数值表示,比如:#ff0000 表示红色,这种可以简写成 #f00 RGB颜色: 红(R).绿(G).蓝 ...

  9. 常见的Linux查看检索归档文件及vi文本编辑器操作大全

    常见的Linux查看检索归档文件及vi文本编辑器操作大全 一.Linux目录结构 1.1 树形目录结构 1.2 根目录 1.3 常见的子目录 二.查看及检索文件 2.1 查看文件内容 -- cat命令 ...

最新文章

  1. scrum工具四款可参考
  2. 解锁云原生 AI 技能 - 开发你的机器学习工作流
  3. C# Socket编程
  4. 我是如何学习写一个操作系统(二):操作系统的启动之Bootloader
  5. java虚拟机栈基本内容
  6. 开源开放 | 开源大学在线实践数据集及知识图谱MOOPer(CCKS2021)
  7. 关于SQL\SQL Server的三值逻辑简析
  8. 嵌入式 博客导航大牛群集
  9. 全链路压测原理篇(方案 概念 架构 实现)
  10. Linux用户管理 (实验2)
  11. 裸辞之后自己在家接单是什么体验?
  12. apache kafka 简介
  13. whose UTF8 encoding is longer than the max length 32766
  14. 计算机生物学美国直博,Nature:所有博士中,生物学博士收入垫底!
  15. 惠普HP Deskjet D2660 打印机驱动
  16. 全国高校人工智能选修课该怎么上?附赠全套PPT
  17. Landsat8卫星介绍
  18. Linux面试题目(一)
  19. MBA-day2数学-应用题-比例问题
  20. Python中随机数的生成

热门文章

  1. LayOut 制作思路与技巧分享 | “小红人”风格建筑分析图
  2. 三星鸿蒙手机,绝版麒麟芯的手机、鸿蒙 OS 的手表,华为 Mate 系列全家桶曝光汇总...
  3. element UI tab拖曳
  4. 数据分析实例一:Python批量处理excel文件
  5. 【pytest】(四) pytest中的fixture (3) : fixture的作用域、实例化顺序和可用性
  6. FLINK 基于1.15.2的Java开发-使用AggregateFunction解决以天为单位诸如PV、UV等统计的实时计算
  7. 基于C++的OpenCV项目实战——文档照片转换成扫描文件
  8. 操作系统0x08-内存管理概念
  9. win32实现类酷狗安装的进度条显示
  10. python计算机二级题库(免费)(仅供个人学习交流使用侵删)