windows C++如何根据文本字符串计算其绘制需占用宽度

分析

计算某串文本在绘制UI上需要占用的宽度,需要以下几个要素:

  • 字符串本身
  • 所使用的字体
    字体会影响所绘制的文字的宽度——那是理所当然的
  • 所使用的GDI或GDI+对象

方法

GDI

::SelectObject(hDC, hFont);
//第四个参数:指向SIZE结构的指针,该结构中字符串的尺寸将被返回。
::GetTextExtentPoint32(hDC, str, StrLen(str), &sizeText); 

GDI+

  • 比GDI复杂,需要使用到GDI+对象的APIMeasureString
Gdiplus::RectF rc1(0, 0, 5000, 2000);
Gdiplus::RectF rc2(0, 0, 0, 0);
g.MeasureString(str, -1, pFont, rc1, pStrFormat, &rc2);
return rc2.Width;
  • 其中参数4是Gdiplus::StringFormat,类似的赋值方式如下:
        Gdiplus::StringFormat* pStrFormat = new Gdiplus::StringFormat();
        pStrFormat->SetAlignment(enHAlign);
        pStrFormat->SetLineAlignment(enVAlign);
        If_Do(nFormat != 0, pStrFormat->SetFormatFlags(nFormat));

原文地址:https://www.cnblogs.com/HelloGreen/p/11538011.html

时间: 2024-10-28 07:56:56

windows C++如何根据文本字符串计算其绘制需占用宽度的相关文章

Windows核心编程第二章,字符串的表示以及宽窄字符的转换

目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 Unicode标准包含的对照表. 2.Ansi字符与Unicode字符的字符串数据类型 2.1.Ansi 与 Unicode数据类型 2.2添加的新的数据类型 2.3 TEXT()宏的使用 3.Windows中的Unicode与Ansi函数 3.1 对于Com接口的移植 4.C 运行库中的Unicod

Excel-判断一个文本字符串中是否包含数字! 判断一个文本字符串是否是纯汉字!

0.判断一个文本字符串中是否包含数字!/判断一个文本字符串是否是纯汉字! 公式=IF(LENB(A1)=2*LEN(A1),”都是汉字“,“含有非汉字字符”) 解释函数: LEN(A1)#返回文本字符串中的字符个数:  ##双字字符*1*双字节字符个数+单字节字符*1*单字节字符个<=>计算字符个数: LENB(A1)#返回文本字符串中的字符个数.与双字节字符集(DBCS)一起使用.##双字节字符*2*双字节字符个数+单字节字符*1*单字节字符个数<=>计算字节个数: 字符:分为双

MySQL 文本字符串类型

字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据. 类型名称 说明 存储需求 CHAR(M) 固定长度的文本字符串 1-255个字节 VARCHAR(M) 可变长度的文本字符串 1-65535个字节 TINYTEXT 非常小的文本字符串 1-256个字节 TEXT 小的文本字符串 1-65535个字节 MEDIUMTEXT 中等大小的文本字符串 1-16777216个字节 LONGTEXT 大的文本字符串 1-4294967296个字节 E

04微信公众平台 - 实现【翻译】功能函数,返回一个文本字符串。

一.功能代码函数实现 private function _baiduDic($keyword) { $tranurlaip = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=9peNkh97N6B9GGj9zBke9tGQ&q={$keyword}&from=auto&to=auto"; //翻译URLapi地址 $transtr = file_get_contents($tranurl

05微信公众平台 - 实现【点歌】功能函数,返回一个文本字符串。

一.功能代码函数实现 /* * 功能5:根据歌名点歌功能,输入歌名即可,传入参数为输入对象$postObj */ private function _listenMusic($postObj) { $ret= "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTi

03微信公众平台 - 实现【天气查询】功能函数,返回一个文本字符串。

一.功能代码函数实现 private function _weather($city) { include("weather_cityId.php"); $c_name=$weather_cityId[$city]; if(!empty($c_name)){ $json=file_get_contents("http://m.weather.com.cn/data/".$c_name.".html"); $data = json_decode($

Windows 上将一个由多字节字符串转换为 Unicode 形式

我们使用 Windows 函数 MultiByteToWideChar 将多字节字符串转换为宽字符串.如下所示: int MultiByteToWideChar( UINT uCodePage, //标识了与多字节字符关联的一个代码页值 DWORD dwFlags, //允许进行额外控制, 但一般传入 0 PCSTR pMultiByteStr, //要转换的字符串 int cbMultiByte, //字符串的长度, 若传入 -1, 则自动判断长度 PWSTR pWideCharStr, //

windows下的gsl(科学计算库)配置

一.GSL介绍 GNU科学计算函数库GSL(GNU Scientific Library)是一个强大的C/C++数值计算函数库,它是一个自由软件,是GNU项目软件的一个部分,遵循GPL协议.GSL是一个为C和C++程序员提供的科学数值运算库.该科学计算库异常强大,函数库提供了大量的数值计算程序,如随机函数.特殊函数和拟合函数等等,整个函数库大约有1000多个函数,几乎涵盖了科学计算的各个方面.提供了如下方面的支持: Complex Numbers          Roots of Polyno

PHP截取并生成纯文本字符串

php截取并生成纯文本字符串.最近使用文本编辑器保存的内容中有html,css以及js标记,但是我只想截取前面一部分纯文本内容显示摘要,这里直接上代码,如下: /**  * PHP清除html.css.js格式并去除空格的PHP函数,并具有截取UTF-8字符串的作用  */ function cutstr_html($string, $sublen){   $string = strip_tags($string);   $string = preg_replace ('/\n/is', '',