首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从使用GetTextExtentPoint32()测量的文本大小中删除此边距?

GetTextExtentPoint32() 是 Windows API 中的一个函数,用于获取特定字体下文本的宽度和高度。这个函数返回的文本大小通常会包含一些额外的空间,这些空间被称为“边距”或“间距”。这些边距可能包括字符间距、行间距以及字体本身的设计空间。

要从使用 GetTextExtentPoint32() 测量的文本大小中删除边距,你可以尝试以下方法:

1. 调整文本布局参数

在调用 GetTextExtentPoint32() 之前,你可以调整 DC(设备上下文)的文本布局参数,如字符间距和行间距,以减少额外的空间。

代码语言:txt
复制
SetTextCharacterExtra(hdc, -2); // 减少字符间距
SetTextJustify(hdc, FALSE, 0); // 关闭文本对齐

2. 使用 GetCharABCWidths() 获取字符宽度

GetCharABCWidths() 函数可以获取每个字符的 ABC 宽度,这些宽度不包括额外的边距。通过累加这些宽度,你可以得到更精确的文本宽度。

代码语言:txt
复制
ABC abc;
if (GetCharABCWidths(hdc, 'A', 'Z', &abc)) {
    int totalWidth = 0;
    for (char c = 'A'; c <= 'Z'; ++c) {
        totalWidth += abc.abcA + abc.abcB + abc.abcC;
    }
}

3. 使用 GetTextMetrics() 获取字体度量

GetTextMetrics() 函数可以获取字体的详细度量信息,包括字符高度、行间距等。这些信息可以帮助你更准确地计算文本大小。

代码语言:txt
复制
TEXTMETRIC tm;
if (GetTextMetrics(hdc, &tm)) {
    int lineHeight = tm.tmHeight + tm.tmExternalLeading;
    // 使用 lineHeight 来调整文本布局
}

4. 手动调整边距

如果你知道额外的边距是多少,你可以直接从 GetTextExtentPoint32() 返回的尺寸中减去这个值。

代码语言:txt
复制
SIZE textSize = GetTextExtentPoint32(hdc, text, strlen(text));
textSize.cx -= extraMargin; // 减去额外的水平边距
textSize.cy -= extraMargin; // 减去额外的垂直边距

应用场景

这种方法通常用于需要精确控制文本布局的应用程序,如图形设计软件、排版工具或自定义控件。

参考链接

请注意,这些方法可能需要根据你的具体需求进行调整。在实际应用中,你可能需要结合多种方法来获得最佳的文本尺寸计算。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【CSS】课程网站头部制作 ② ( 导航栏测量 | 导航栏编写 | 代码示例 )

文章目录 一、 导航栏测量 1、 左侧边界 2、 文本测量 3、 底部边框测量 二、 导航栏代码编写 1、 HTML 标签结构 2、 CSS 样式 3、最终显示效果 三、 完整代码 1、 HTML...60 像素即可 ; 该边距可以设置为 logo 盒子的 右外边距为 60 像素 , 也可以设置为 导航栏盒子 的 做外边距为 60 像素 ; 这里设置为 logo 盒子的 右外边距为 60 像素 :....logo { /* 靠左侧浮动 */ float: left; /* 设置与 导航栏盒子 的外边距 */ margin-right: 60px; } 2、 文本测量 选择 " 横排文字 "...工具 , 点击文字内容 ; 在文字工具中 , 会显示文字大小 18 像素 , 点击右侧的颜色 , 还会弹出 " 拾色器 ( 文本颜色 ) " 对话框 , 其中显示了文本颜色 #050505 ;...盒子放在一行中 ; /* 导航栏设置 左浮动 */ .nav { float: left; } 导航栏中的无序列表 , 需要设置左浮动 , 才能将 块级元素 从左右到进行排列 ; /* 导航栏内部

3.9K20
  • 【CSS】课程网站头部制作 ⑤ ( 用户栏测量 | 用户栏代码编写 | 代码示例 )

    文章目录 一、用户栏测量 1、头像文字测量 2、头像切图 二、用户栏代码编写 1、HTML 结构 2、CSS 样式 3、展示效果 一、用户栏测量 ---- 1、头像文字测量 用户与左侧搜索栏 , 间隔...30 像素 , 这里设置 用户栏 左外边距 30 像素 ; 头像 宽高 30 x 30 像素 ; 使用横排文字工具 , 选中文字 , 文字大小 14 像素 , 文字颜色 #666666 ; 用户头像..., 需要使用 padding 内边距的方式设置 ; 文字垂直居中对齐 , 需要使用 内容高度 = 行高 的方式设置 ; 核心代码 : <!...用户栏 头像样式 */ .user .user-img { float: left; /* 用户头像 30 像素 容器高 42 上下各 6 像素边距 图像垂直居中 */ padding: 6px...用户栏 头像样式 */ .user .user-img { float: left; /* 用户头像 30 像素 容器高 42 上下各 6 像素边距 图像垂直居中 */ padding: 6px

    2.5K30

    【CSS】课程网站 Banner 制作 ② ( Banner 栏版心盒子测量 | Banner 版心盒子模型左侧导航栏代码示例 )

    栏版心盒子测量 ---- 1、测量版心元素尺寸 拉四条辅助线 , 将版心包起来 , 可以测量 Banner 条版心的尺寸为 1200 x 420 像素 ; 根据上一篇博客 【CSS】课程网站 Banner...制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 ) 测量的尺寸 , 版心的尺寸为 1200 x 420 像素 ; 版心左侧的 侧导航栏 尺寸为 190 x 420 像素...像素的 左内边距 ; 右侧的文字 , 距离测导航栏的右侧有 20 像素的右内边距 ; 测量 测导航栏 文本间隔 , 也就是行高 , 从上一行开始到下一行开始位置 , 行高 44 像素 ;...左侧的 侧导航栏 的 背景是 黑色半透明 背景 ; 使用吸管工具 , 吸取 鼠标移动到 侧导航栏 上的颜色值 为 #00b4ff ; 侧导航栏中 , 默认状态下 , 文字默认颜色为白色 ; 二、...用户栏 头像样式 */ .user .user-img { float: left; /* 用户头像 30 像素 容器高 42 上下各 6 像素边距 图像垂直居中 */ padding: 6px

    3.3K50

    【CSS】课程网站 网格商品展示 模块制作 ① ( 网格商品展示模块盒子模型测量及样式 | 顶部文本标题盒子测量及样式 | 代码示例 )

    文章目录 一、网格商品展示模块盒子模型测量及样式 1、盒子尺寸测量 2、标题盒子尺寸测量和样式 3、左侧文本盒子尺寸测量和样式 4、右侧文本盒子尺寸测量和样式 二、顶部文本标题盒子代码示例 1、HTML...标签结构 2、CSS 样式 3、展示效果 绘制矩形框中的部分 : 一、网格商品展示模块盒子模型测量及样式 ---- 1、盒子尺寸测量 下面的 网格商品展示模块盒子模型 , 可以分为三个盒子 ,...1 行 , 2 行 或 3 行 ; 2、标题盒子尺寸测量和样式 文本所在盒子 , 与 顶部的导航栏有 15 像素间隔 , 这里使用 上外边距 设置 ; /* 网格商品展示模块大盒子 距离上面的 导航栏...= 内容高度 , 这里精确的测量 " 精品推荐 " 文本的行高与内容高度 ; 该文本盒子如下图所示 , 文本内容 20 像素 , 文本上面和下面各有 20 像素的空白 ; 行高直接设置为 60 像素...*/ font-size: 20px; color: #494949; /* 取消标题的加粗样式, 也可以使用 normal 值 */ font-weight: 400; } 4、右侧文本盒子尺寸测量和样式

    4.3K40

    【CSS】课程网站横版导航栏 ( 横版导航栏测量及样式 | 代码示例 )

    绘制矩形框中的部分 : 一、盒子测量及样式 ---- 盒子样式如下 : 1、总体盒子测量及样式 该盒子是处于版心位置 , 先为其设置版心的样式 , 版心宽度 1200 像素 , 水平居中 ,...先将版心的样式设置给盒子 ; /* 版心宽度 1200 像素 , 在浏览器中居中对齐 */ .w { width: 1200px; margin: auto; } 该盒子大小为 1200x60..., 0, 0, .2); } 2、左侧盒子测量及样式 左侧盒子区域如下 , 盒子高度充满父容器 , 继承父容器的高度为 60 像素 , 行高继承父容器也是 60 像素 , 左右两侧各有 30 像素的 外边距..., 竖线中间的文字都是链接标签 , 每个链接标签左右两侧各有 30 像素的间隔 , 这里使用外边距实现 ; 文本的高度和行高继承父元素的样式 , 都为 60 , 会自动垂直居中 , 文本大小为...ul { /* 10 像素内边距 - 使用外边距会出现塌陷的问题 */ padding-top: 10px; } /* Banner 条右侧 课程表 无序列表 列表项样式 */ .course-bd

    5.2K30

    【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )

    , 黄色矩形框是 版心盒子 , 洋红色矩形框为左侧导航栏盒子 , 右侧绿色矩形框为 课程表 盒子 ; 2、背景测量切图 使用吸管工具 , 点击背景 , 吸取颜色值 , 然后点击 " 前景色 " 拾色器...中 , 点击 " 导出选中图层 " , 切图后的效果 : 二、Banner 盒子模型代码 ---- 1、HTML 标签结构 距 20 像素 */ margin-right: 20px; /* 行高 = 内容高度 垂直居中 */ line-height: 40px; /* 字体大小 */ font-size...20 像素内边距 */ padding-left: 20px; /* 设置文本颜色 */ color: #bfbfbf; } /* 搜索框按钮 */ .search button { /*...用户栏 头像样式 */ .user .user-img { float: left; /* 用户头像 30 像素 容器高 42 上下各 6 像素边距 图像垂直居中 */ padding: 6px

    3.9K20

    【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒子模型测量及样式 | 处理列表间隙导致意外换行问题 | 代码示例 )

    绘制矩形框中的部分 : 一、网格展示盒子模型测量及样式 ---- 1、盒子尺寸测量 绘制如下样式排列的盒子 , 该盒子建议不要设置高度 , 这样盒子可以放若干行 , 由盒子中列表的元素个数 , 自动决定放几行..., 会导致最后一个元素掉到第二行 , 这里需要将最后一个元素的右边距去掉 ; 解决上述问题有 2 个方案 : 将最后一个元素的右边距去掉 ; 将盒子宽度从 1200 像素修改为 1215 像素 ; CSS...像素的外边距 */ margin: 0 20px; /* 设置字体大小和颜色 */ font-size: 12px; color: #999; } /* 第二行文本样式 - 前面的橙色文本...{ /* 左右设置 20 像素的外边距 */ margin: 0 20px; /* 设置字体大小和颜色 */ font-size: 12px; color: #999; } /* 第二行文本样式...{ /* 左右设置 20 像素的外边距 */ margin: 0 20px; /* 设置字体大小和颜色 */ font-size: 12px; color: #999; } /* 第二行文本样式

    2.4K20

    【CSS】课程网站网页底部开发 ( 网页底部盒子模型测量及样式 | 代码示例 )

    文章目录 一、网页底部盒子模型测量及样式 1、盒子布局说明 2、底部的大盒子测量及样式 3、版心盒子 4、版权盒子 5、链接盒子 二、代码示例 1、HTML 标签结构 2、CSS 样式 3、显示效果...绘制矩形框中的部分 : 一、网页底部盒子模型测量及样式 ---- 1、盒子布局说明 底部盒子主要由如下部分组成 : 红色盒子 : 最外层盒子 水平方向 充满整个 浏览器 , 背景是白色 ; 蓝色盒子...底部的大盒子 高度 415 像素 , 实际内容距离顶部有 30 像素的间隔 , 这里使用 30 像素的 内边距撑开该间隔 , ( 外边距会造成塌陷 ) , 由于内边距会撑大盒子 , 这里使用 385...这里需要将盒子宽度从 1200 像素修改为 1215 像素 正好放 5 盒子 + 5 间隙*/ width: 1215px; } /* 网格中 ul 列表中每个列表项样式 */ ....{ /* 左右设置 20 像素的外边距 */ margin: 0 20px; /* 设置字体大小和颜色 */ font-size: 12px; color: #999; } /* 第二行文本样式

    4.2K30

    dotnet OpenXML 聊聊 PPT 文本行距行高计算公式

    倍数行距是本文的重点,指的是按照一定的倍数,如 1.5 倍行距等拉升文本框里面,每一行文本的距离。...而固定行距指的是固定多少尺寸的高度的行距 行高,一行的高度值,以横排文本作为默认例子,指的是选择文本时,所看到的选择范围的高度值,如下图 行距 = 上边距+下边距 修改行距时不影响文本的文字高度,只修改上边距和下边距的值...行高也因为行距的变更而变更 我根据使用 QQ 截图工具,测量不同的字体和字号,对于中文文字的行高的影响,通过逗比的算法计算出行距行高计算公式。...以下公式没有找到任何权威的文档,仅仅只是我根据测量拿到的值,使用以下公式计算出来的值存在很小的误差 在 Office 的 PPT 的文本行高的计算公式是 PPTPixelLineSpacing = (a...值如下: 微软雅黑 1.31982421875 宋体 1.140625 因为在 PPT 中不同的字体对行高没有影响,以上都是固定微软雅黑进行测试 更多请看 Office 使用 OpenXML SDK

    83850

    SwiftUI 中的内容边距

    在使用 UIKit 时,我们可以访问 readableContentGuide 布局指南。从字面上看,它是另一个安全区域,适应屏幕大小,但仅适用于文本内容。...可运行 Demo提供一个基于提供的代码片段的简化版本的Swift Playground示例,用于演示如何使用contentMargins视图修饰符来管理内容边距。...你可以在 Playground 中运行此代码以查看结果。总结本文介绍了 SwiftUI 中的内容边距管理,通过对比安全区域的概念,解释了内容边距的重要性。...文章从创建示例开始,展示了在列表视图中如何处理内容边距的问题。...最后,引入了 contentMargins 视图修饰符,并详细解释了其用法和参数,以及如何使用它来管理内容边距。通过本文,读者可以更好地理解并掌握 SwiftUI 中内容边距的管理技巧。

    19132

    可以提高web前端开发效率的6个浏览器书签,建议你赶快用起来吧

    例如,喜欢观察内容在网站设计流程中如何阅读的文案,或者说,想要确保文本以特定字体大小舒适地适合特定空间的设计师。 JavaScript 有一个非常简单的功能,可以使整个 HTML 文档可编辑。...如果你想看看它是如何工作的,首先使用相关的键盘快捷键进入浏览器的控制台:contenteditable="true"``contentEditable="true" Chrome: Option + ⌘...开发人员可能希望在处理光学不平衡时更好地可视化边界(即,当某些东西“看起来不对”时,即使它不是)、边距崩溃(当某些边距被忽略时)、display:/ float:/的各种问题position:等等。...(0 0 0 / 10%)"); 我们使用半透明背景,因为透明度堆叠,这确保每个嵌套元素都是可区分的,并且可以测量它们之间的距离。...切换类 您可能希望从 HTML 元素中添加或删除类,以触发新状态或外观更改,也称为切换类。类切换发生在大多数实时网站的幕后,但它也可以在测试期间用于跳过必须满足某些面向用户的条件。

    1.6K10

    自定义View二篇,如何自定义一个规范的ViewGroup

    前言 在自定义View开篇,必须跨过的一道坎儿 中,我们介绍了自定义View的几种方式,以及如何实现一个规范的自定义View,上文中也说了,实现一个规范的自定义ViewGroup是一件比较困难的事情,因为要考虑的情况包含...,务必使用getMeasureWidth不能使用getWidth,因为前者是在测量的时候获取的,后者在布局完成之后才能获取到。...考虑ViewGroup的padding问题 上面代码,已经实现了最简单的垂直排列,我们给LinerLayoutView设置大小为40的边距,发现边距并没有生效,所以我们需要在onMeasure以及onLayout...我们可以看出ViewGroup的边距已经生效了。...view的边距,记得在计算总高度的时候 也要加上边距和下边距,运行结果如下图所示 ?

    47310

    【CSS】课程网站 Banner 制作 ③ ( Banner 栏右侧课程盒子测量及样式 | Banner 版心盒子模型右侧课程栏代码示例 )

    2、CSS 样式 3、展示效果 绘制下图矩形框内容 : 一、Banner 栏右侧课程盒子测量及样式 ---- 1、盒子尺寸测量 课程表的宽高 228 x 300 像素 ; 课程表距离顶部有 50...课程表头部尺寸 228x48 像素 , 背景颜色值 #9bceea ; 使用文字工具查看课程表 , 文字大小 18 像素 , 文字颜色 白色 , 文字加粗 ; 最终的头部样式如下 : /*....course-bd ul { /* 10 像素内边距 - 使用外边距会出现塌陷的问题 */ padding-top: 10px; } 列表项高度是 60 像素, 文字与顶部有 10 像素间隔 ,...下面直接紧贴写文字 以达到多行文本居中对齐效果 */ margin-top: 10px; } 列表项中的三种文本 , 样式如下 : /* Banner 条右侧 课程表 无序列表 列表项 继续学习...用户栏 头像样式 */ .user .user-img { float: left; /* 用户头像 30 像素 容器高 42 上下各 6 像素边距 图像垂直居中 */ padding: 6px

    3.6K60

    【CSS】309- 复习 CSS盒模型

    2.4 实例题(根据盒模型解释边距重叠) 例:父元素里面嵌套了一个子元素,已知子元素的高度是 100px,子元素与父元素的上边距是 10px,计算父元素的实际高度。 ?...主要看怎么父元素的盒模型如何设置。...父子元素和兄弟元素边距重叠,重叠原则取最大值。空元素的边距重叠是取 margin 与 padding 的最大值。...2.5.2 BFC原理(渲染规则|布局规则): (1)内部的 Box 会在垂直方向,从顶部开始一个接着一个地放置; (2)Box 垂直方向的距离由 margin (外边距)决定,属于同一个 BFC 的两个相邻...都有效; (3)Box 垂直对齐方式:以它们的底部、顶部对齐,或以它们里面的文本的基线(baseline)对齐(默认,文本与图片对其),例:line-heigth 与 vertical-align。

    1.5K30

    【CSS】课程网站头部制作 ③ ( 搜索栏表单测量 | 搜索栏表单代码编写 | 代码示例 )

    文章目录 一、搜索栏表单测量 1、左侧边界 2、文本输入框表单尺寸 3、文本输入框表单提示文本测量 二、搜索栏表单代码编写 1、HTML 标签结构 2、CSS 样式 3、输入表单效果 一、搜索栏表单测量...---- 1、左侧边界 搜索栏 , 大概结构如下 , 左侧是个文本框 , 右侧是个按钮 ; 导航栏文本 有 10 像素内边距 , 20 像素外边距 , 文本输入框 表单 , 距离 导航栏外边距有...65 像素 ; 2、文本输入框表单尺寸 左侧的表单 高度 38 像素 , 边框 1 像素 , 左侧表单的长度为 360 像素 , 测量 361 像素 , 减去 1 像素边框 ; 使用吸管工具..., 吸取边框的颜色值 , 为 #00a4ff ; 3、文本输入框表单提示文本测量 使用 横排文字工具 , 点击表单中的 提示 文本 , 该文本大小 14 像素 , 颜色值 #bfbfbf ;...提示文本在 Input 表单中的 value 属性中设置 ; 提示文本左侧 距离边框 有 20 像素 , 这里可以设置 20 像素的内边距 ; 注意 : 设置内边距会拉长盒子 , 盒子的尺寸要减去内边距

    1.9K30

    Android开发笔记(十二)测量尺寸与下拉刷新

    麻烦的是方式2,因为下级控件每个尺寸都有可能不确定,比如文本控件得看文字大小、行数,图像控件得看图片大小、拉伸情况,所以大家想想,如果这时候我们自己去一个个算过去(下级控件的个数也不确定),这算得头都大了...废话少说,让我们直接切入正题,看看测量模式怎么用,以及用在哪里。 下拉刷新框架中的尺寸测量 许多APP都有下拉刷新的功能,比如下面这个图片是一种下拉刷新的展示框: ?...在Android规定的测量过程中,主要有三个步骤: 1、获得宽与高的测量模式; 2、按照测量模式进行丈量; 3、获得测量后的宽与高的大小; 获得宽与高的测量模式 首先取到目标视图的宽和高的取值...,从布局参数中获取: ViewGroup.LayoutParams params = aViewObject.getLayoutParams(); int originWidth = params.width...getChildMeasureSpec的好处是可以设置边距,并且按常规处理无需我们再分支处理;makeMeasureSpec则更灵活,像下拉刷新会不断更新下拉区域的实际高度,偏移量可能是负数统统需要重新适配

    1.1K40

    【知识】Latex中的emptmm等长度单位及使用场景

    三、有哪些使用示例?1. 设置文档的页边距2. 调整字体大小3. 定义与文字大小相关的间距4. 调整表格、图片或其他浮动体的宽度5....在LaTeX中,em、pt、mm等都是长度单位,用于定义文档中元素的尺寸,比如字体大小、页面边距、间距等。...当需要与文本的字体大小密切相关联的设计时,使用em或ex单位,因为它们会随字体大小而变化,使得布局更具可伸缩性。对于需要严格对齐的文档,pt或bp提供了足够的精确度。...设置文档的页边距        使用geometry包设置页面的边距时,常用单位是cm或in:\usepackage{geometry} \geometry{left=2cm, top=2cm, right...} b \] % 使用具体的点数        这些示例显示了如何在LaTeX文档中根据不同的需要选择和应用各种度量单位。

    82810

    R|绘图边距及布局

    简单介绍一下如何调整绘图区域及边距区域,如何将多个图形绘制在一张图中,并根据图形的大小及特性调整一下图形分布。...一、绘图及边距区域设置 通过par参数,合理的调整绘图区大小,内边距和外边距的大小,能更好的展示图形。...简单示例如下: #外边距 margin设置 ,下左上右 ;mai(英寸边距) par(oma=c(3,3,3,3)) #内边距 margin设置 下左上右 omi(英寸边距) par(...mat用矩阵设置窗口的划分,矩阵的0元素表示该位置不画图,非0元素必须包括从1开始的连续的整数值,比如:1……N,按非0元素的大小设置图形的顺序。...综上:合理的调整图形绘图及边距区域,设计好图形分布,更好的显示自己的想法。待续 。。。

    2.4K10

    不同大小的文字底部对齐,为什么不能使用flex-end

    flex容器下,不同大小的文字底部对齐,为什么应该使用 baseline 而不是 flex-end?...分析原因发现,是因为文字周围有一圈空白的边距,这个边距在字体大小不同的情况下是不一致的,所以矩形区域虽然对齐了,但是文字底部没有对齐。...而这个边距其实和 line-height 有关,所以首先来看看如何从 line-height 的角度出发解决问题。...从 line-height 的角度解决为什么你不应该使用 line-height: 1首先想到的就是把文字周围的边距给彻底去掉,也即设置 line-height: 1,那么为什么说不应该使用这种方式呢?...图片使用 line-height 的正确方法在完全去掉周围边距这种方法不可用的情况下,只能通过把不同字体大小的透明边距宽度设置为一致就可以了。

    1.2K40
    领券