针对同一声明的LOGFONT的TEXTMETRIC.tmMaxCharWidth属性在Win2000和Vista下居然不一样

《Windows程序设计》读书笔四 文本输出 客户区是指整个应用程序窗口中没有被标题栏,边框,菜单栏,工具栏,状态栏和滚动条占用的区域。就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域 4.1 绘制和重绘 windows是一个消息驱动的系统,他使用两种方式把事件通知给应用程序。1)把消息放在应用程序消息队列中2)或者适当向窗口过程发送消息。 4.1.1 WM_PAINT消息 在进入消息循环之前调用UpdateWindo 阅读详情

在把一些早期开发的针对Windows 2000的Win32 SDK/MFC和WinForm应用移植到Vista的过程中,我们发现一些很有趣或很恶心的问题,TEXTMETRIC.tmMaxCharWidth是其中比较恶心的一例。

如同标题所述,“针对同一声明的LOGFONT的TEXTMETRIC.tmMaxCharWidth属性在Win2000和Vista下居然不一样”,是的,实践表明它们缺省不一样,声明了同样的LOGFONT的同一段代码,分别在Win2000下和Vista下获取TEXTMETRIC.tmMaxCharWidth属性,得到的结果是不一样的,一般规律是Vista得到的数值比2000下要大,而且随着字号的增大,Vista跟2000之间的差值也随着增大。

因为我们有一些程序是根据TEXTMETRIC.tmMaxCharWidth来计算字符的坐标并逐个逐个描画字符的,从现象看起来,就好像是当同一个字符串表示在画面上的时候,Vista下的字符间隙比Win2000下要大。而实际上只是字符坐标上的变化,并非真的是字符间隙发生了变化,如果把整个字符串传递给GDI的函数去描画的话(例如DrawTextEX),是没有这样的问题的。

我们很遗憾地发现,通过搜索引擎并不能找到问题的答案,而且发现甚至连讨论这个问题的文章都没有,难道是已经没有人使用这样的方案去描画字符串(特殊场合)?或者说遇到这样的问题的人根本就不在意这个问题?

不得已我们使用了一个比较笨的办法去解决问题,我们把系统中要用到的各种字体字号的组合列举出来,在Windows 2000中预先算出各个对应的TEXTMETRIC.tmMaxCharWidth值,然后在Vista中直接套用2000下算出来的值(常量的形式),而不是在程序中计算TEXTMETRIC.tmMaxCharWidth。

Well,我希望有大牛前来传道授业解惑~

Halcon VariableInspect (变量检查拓展)安装指南 网址2; 阅读详情

相关推荐

CANoe基础讲解01:从零开始使用CANoe轻松搭建你的第一个CAN网络

本文是一篇CANoe软件入门实操指南,逐步演示了如何从零创建并运行一个CAN FD仿真工程。内容包括:启动软件、配置硬件通道与网络、加载DBC数据库、使用CAPL编写仿真节点发送CAN报文,最终启动测量并在Trace窗口中查看通信结果。通过七个清晰步骤,帮助初学者快速掌握CANoe基本操作,完成首个可运行的仿真网络搭建

车载网络小D的博客 1573

wxPython之wxFrame

在使用wxWidgets的手冊時發 現,wxWidgets的幫助很多時候不完全適用於wxPython,因為wxPython有的功能有所擴展。僅參考wxWidgets的手冊進行 wxYthon編程還是不夠。很多時候還是有必須要用python的dir函數將wx的對象、方法、屬性列出來,然後根據名稱來猜測其功能,當然也可以到 網絡上查找或參考相應的范例。 下面是用pythn列出來wxFrame

专注于Python 4900

发那科机器人弧焊指令实战:从Search指令到组掩码设置的完整避坑指南

本文详细解析了发那科机器人弧焊指令系统的实战应用,从Search指令的正确使用到组掩码设置的避坑技巧。通过实际案例和参数优化建议,帮助工程师提升焊接质量和生产效率,避免常见错误操作。特别针对T2模式示教难题和外部轴协调运动提供了专业解决方案。

weixin_29040367的博客 184

字体信息 TEXTMETRIC 字体结构 GLYPHMETRICS

tmHeight指字符高度(不包括两行字符之间的间距),tmAscent表示字符基线以上部分的高度,tmDescent表示字符基线以下部分的高度。tmInternalLeading表示字符内预留的间距包含在tmAscent中(主要用于显示重音符号等)。tmExternalLeading标准两行字符之间的间距,tmAveCharWidth表示(小写 x)字符的加权平均宽度,tmMaxCh...

weixin_34087301的博客 559

从接线到组态:手把手教你搞定PROFIBUS-DP与PA的混合网络搭建(基于西门子TIA Portal)

本文详细介绍了PROFIBUS-DP与PA混合网络的搭建方法,基于西门子TIA Portal平台,从硬件选型、网络架构设计到组态配置和现场调试,提供了一套完整的实战指南。重点解析了DP/PA耦合器的使用、地址映射策略及网络诊断技巧,帮助工程师高效构建高可靠性的工业自动化网络。

weixin_32103009的博客 302

深入解析以太网接口中的BOB Smith电路设计

本文深入解析以太网接口中的BOB Smith电路设计,详细介绍了其在共模噪声抑制、浪涌防护和EMI优化中的关键作用。通过实际案例和设计要点,帮助工程师正确选择75Ω电阻和高压电容等元件,优化PCB布局,解决电压型与电流型PHY的设计差异,以及千兆与百兆以太网的特殊考量。

weixin_28339967的博客 687

TEXTMETRIC 详解

TEXTMETRIC  TEXTMETRIC是在WINGDI.H中定义的型态的结构。TEXTMETRIC结构有20个栏位:  typedef struct tagTEXTMETRIC { // tm   LONG tmHeight; //字符高度  LONG tmAscent; //字符上部高度(基线以上)  LONG tmDescent; //字符下部高度(基线以下)  LONG tmInt

awenC++ 2087

基于容积卡尔曼滤波的弹目相对姿态估计算法及其在导弹末端制导中的应用

本文针对导弹末端制导中的强非线性姿态估计问题,提出了一种基于容积卡尔曼滤波(CKF)的弹目相对姿态估计算法。通过建立包含视线角、角速率和相对距离的6维状态模型,利用三阶球面-相径容积准则精确逼近非线性状态分布,避免了传统EKF的线性化误差。在MATLAB/Simulink仿真中,CKF表现出比EKF更高的视线角速率估计精度和更快的收敛速度,最终显著减小了脱靶量,验证了其在提升导弹末端制导精度方面的有效性。该算法计算复杂度适中,适合工程实现,为高精度非线性姿态估计提供了新思路。

AI的内部世界的博客 105

LOGFONT大小与字体大小的转换方法

字体大小=-font.lfHeight*72.0/GetDeviceCaps(this->GetDC()->m_hDC, LOGPIXELSY)+0.5 ;

startexcel的专栏 1万+

[DDR5]DDR5 SDRAM 状态图 和 基本功能

DDR5 SDRAM的读写操作以突发(burst mode)为导向,从选定的位置开始,并按照编程顺序进行16个突发长度或8个“切片”突发长度的操作。从ACTIVATE命令开始,然后是读取或写入命令。

串起点滴 1200

【人工智能 Open AI】程序员怎样提升研发效率?从技术、业务、项目管理等等多个方面来阐述。

程序员要想提升研发效率,需要从技术、业务、项目管理等多方面着手,多靠工具配合实践实现,从而提升研发效率。

AI天才研究院 5526

TEXTMETRIC 结构体的一些说明

typedef struct tagTEXTMETRIC {  /* tm */    int  tmHeight;    int  tmAscent;   //基线以上的叫做升序高度 字体的高度就是升序的高度脚降序的高度    int  tmDescent; //基线以下的叫做降序高度    int  tmInternalLeading;    int  tmExternalLeading;  

webnumen的专栏 3200

【基础-多选】HarmonyOS鸿蒙应用开发

1、HarmonyOS提供了基础的应用加固安全能力,包括混淆、加密和代码签名能力。正确2、可以通过ohpm uninstall 指令下载指定的三方库。错误3、支持模块化开发是指一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发,Module中可以包含源代码、资源文件、第三方库、配置文件等,每一个Module可以独立编译,实现特定的功能。这种模块化、松耦合的应用管理方式有助于应用的开发、维护与扩展。正确。

江拥羡橙的博客 1万+

emf格式图片,费了3天时间

[code="java"]public static byte[] createEmfTag(String sRand) throws Exception{ Random random = new Random();// 创建一个随机类 Vector emf = new Vector(); // 创建边框 RoundRect rr=new RoundRect(new Rec...

love398146779的专栏 1648

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

字符高度

<br /><br />BOOL GetTextMetrics(HDC hdc,LPTEXTMETRIC lptm);可以获得字体信息,并填入TEXTMETRIC结构:<br />typedef struct tagTEXTMETRIC<br />{<br />    LONG tmHeight;<br />    LONG tmAscent;<br />    LONG tmDescent;<br />    LONG tmInternalLeading;<br />    LONG tmExternal

1096

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LOGFONT设置字体

LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下: typedef struct tagLOGFONTA {     LONG      lfHeight;     LONG      lfWidth;     LONG      lfEscapement;     LONG      lfOrientation;     LONG      lfW

u010755499的专栏 4501

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TEXTMETRIC 结构

TEXTMETRIC 结构记录当前设备环境中有关字体的各种信息。TEXTMETRIC 结构成员的值的单位取决于设备环境中当前选定的映射模式,默认的映射模式是 MM_TEXT,所以它们的值是以像素为单位的。 typedef struct tagTEXTMETRIC { LONG tmHeight; LONG tmAscent; LONG tmDescent; LO...

weixin_34291004的博客 442

第四章 输出文字(绘制和更新,GDI 简介)

<br />在前一章,您看到了一个简单的Windows 98程序,它在窗口中央,或者更准确地说,在显示区域中央显示一行文字。正如我们学到的,显示区域是整个应用程序窗口中未被标题列、窗口边框,以及可选的菜单列、工具列、状态列和滚动条占据的部分。简而言之,显示区域是窗口中可以由程序任意书写和传递视觉信息的部分。<br />对于程序的显示区域,您几乎可以为所欲为,只不过您不能假定窗口大小是某一特定尺寸,或者在程序执行时其大小会保持不变。如果您不熟悉图形窗口环境的程序设计,这些限制可能会使您感到惊讶:不能再假设屏幕

厦门 程序人生 993

c语言settextstyle有哪些字体,EasyX 文档 - settextstyle

settextstyle这个函数用于设置当前字体样式。void settextstyle(int nHeight,int nWidth,LPCTSTR lpszFace);void settextstyle(int nHeight,int nWidth,LPCTSTR lpszFace,int nEscapement,int nOrientation,int nWeight,bool bItali...

weixin_42131728的博客 3147

wxPython

wxpython界面编程的精华。如果看到这个博文的人有人在研究boa的话,一起交流哈!

xiao_bodian的专栏 7710
上一篇: 关于HTML元素的SRC属性的一个问题
下一篇: 最近这些新技术到底是怎么了?
梦想家起飞
博客等级 码龄24年 24粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值