MFC——文本字体操作
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——文本字体操作相关推荐
- MFC使用ADO操作数据库
MFC使用ADO操作数据库 1. ADO概述 ADO是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口.ADO使您能够编写应用程序以通过OLE. DB ...
- [视频]MAC中如何单独放大文本字体
我们知道使用MAC触控板的双指合拢手势可以进行放大或缩小操作,但其对应的是整个界面内容的放大及缩小,如果仅对其文本内容进行放大或缩小,可使用快捷键进行操作. 默认的 "Command&quo ...
- python使用matplotlib可视化、使用rcParams参数调整可视化图像中线条宽度、线条类型、文本字体、字体大小、字体颜色、字体类型、文本颜色等
python使用matplotlib可视化.使用rcParams参数调整可视化图像中线条宽度.线条类型.文本字体.字体大小.字体颜色.字体类型.文本颜色等 目录
- python使用matplotlib可视化:设置坐标轴的范围、设置主次坐标轴刻度、坐标轴刻度显示样式、坐标轴刻度数颜色、小数点位数、坐标轴刻度网格线、线条类型、数据点形状标签、文本字体、颜色、大小等
python使用matplotlib可视化:设置坐标轴的范围.设置主次坐标轴刻度.坐标轴刻度显示样式.坐标轴刻度数颜色.小数点位数.坐标轴刻度网格线.线条类型.数据点形状标签.文本字体.颜色.大小等 ...
- R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小
R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录
- R语言可视化包ggplot2改变图例(legend)元素的大小实战:包含图例中标题字体、文本字体、标识模块(key)的大小
R语言可视化包ggplot2改变图例(legend)元素的大小实战:包含图例中标题字体.文本字体.标识模块(key)的大小 目录
- css3-2 CSS3选择器和文本字体样式
css3-2 CSS3选择器和文本字体样式 一.总结 一句话总结:是要记下来的,记下来可以省很多事. 1.css的基本选择器中的:first-letter和:first-line是什么意思? :f ...
- Css颜色和文本字体
Css颜色,文本字体 css颜色表示法 颜色名表示,比如:red 红色,gold 金色 16进制数值表示,比如:#ff0000 表示红色,这种可以简写成 #f00 RGB颜色: 红(R).绿(G).蓝 ...
- 常见的Linux查看检索归档文件及vi文本编辑器操作大全
常见的Linux查看检索归档文件及vi文本编辑器操作大全 一.Linux目录结构 1.1 树形目录结构 1.2 根目录 1.3 常见的子目录 二.查看及检索文件 2.1 查看文件内容 -- cat命令 ...
最新文章
- scrum工具四款可参考
- 解锁云原生 AI 技能 - 开发你的机器学习工作流
- C# Socket编程
- 我是如何学习写一个操作系统(二):操作系统的启动之Bootloader
- java虚拟机栈基本内容
- 开源开放 | 开源大学在线实践数据集及知识图谱MOOPer(CCKS2021)
- 关于SQL\SQL Server的三值逻辑简析
- 嵌入式 博客导航大牛群集
- 全链路压测原理篇(方案 概念 架构 实现)
- Linux用户管理 (实验2)
- 裸辞之后自己在家接单是什么体验?
- apache kafka 简介
- whose UTF8 encoding is longer than the max length 32766
- 计算机生物学美国直博,Nature:所有博士中,生物学博士收入垫底!
- 惠普HP Deskjet D2660 打印机驱动
- 全国高校人工智能选修课该怎么上?附赠全套PPT
- Landsat8卫星介绍
- Linux面试题目(一)
- MBA-day2数学-应用题-比例问题
- Python中随机数的生成
热门文章
- LayOut 制作思路与技巧分享 | “小红人”风格建筑分析图
- 三星鸿蒙手机,绝版麒麟芯的手机、鸿蒙 OS 的手表,华为 Mate 系列全家桶曝光汇总...
- element UI tab拖曳
- 数据分析实例一:Python批量处理excel文件
- 【pytest】(四) pytest中的fixture (3) : fixture的作用域、实例化顺序和可用性
- FLINK 基于1.15.2的Java开发-使用AggregateFunction解决以天为单位诸如PV、UV等统计的实时计算
- 基于C++的OpenCV项目实战——文档照片转换成扫描文件
- 操作系统0x08-内存管理概念
- win32实现类酷狗安装的进度条显示
- python计算机二级题库(免费)(仅供个人学习交流使用侵删)