鱼C论坛

 找回密码
 立即注册
查看: 2247|回复: 0

[学习笔记] 《Windows SDK》010 不要试图猜测文本的尺寸

[复制链接]
发表于 2017-7-11 12:18:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 BngThea 于 2017-7-15 09:54 编辑

一 核心知识点
* 养成灵活的编程习惯
尽量减少宏定义限定的值,增加编程灵活性

* 通过API函数获得行距
不要尝试猜测文本尺寸,可以使用Windows自带函数GetTextMetrics去获取推而广之,在Windows学习编程中,如果遇到需要主观猜测的逻辑时,首先应该去找找API档案

* 文本都有固定的参数
可以通过TEXTMETRIC结构详细学习文本的所有属性

二 新API函数
* GetTextMetrics(hdc, &tm)
该函数获得当前环境的文本格式,并将其放到文本结构tm中

第一个参数:当前环境设置
第二个参数:文本格式搁置的结构对象

该函数一般响应WM_CREATE消息

* TEXTMESTRIC结构
该结构定义了文本格式的各个参数,其中最重要的是关于字符在x,y方向的占位,一般的流程如下:
1 定义结构的对象tm
2 利用GetTextMetrics(hdc,&tm) 将当前文本格式填充给tm
3 通过定义静态变量来存储x,y方向的占位数

* GetDC(hwnd) 和 ReleaseDC(hwnd, hdc)
两个API函数始终成对出现,用来在非WM_PAINT消息中获得和释放当前环境hdc

三 示例
典型的通过Windows设置行间距的代码如下

  1.          HDC hdc;
  2.         PAINTSTRUCT ps;
  3.         TEXTMETRIC tm; //定义文本结构对象
  4.         static int cxChar, cyChar;//定义静态变量用以存放文本格式中的x,y方向占位

  5.         switch (message)
  6.         {
  7.         case WM_CREATE:
  8.               hdc = GetDC(hwnd);
  9.               GetTextMetrics(hdc, &tm); //填充tm参数
  10.               cxChar = tm.tmAveCharWidth; //设置字符在x方向的占位
  11.               cyChar = tm.tmHeight + tm.tmExternalLeading; //设置行距
  12.               ReleaseDC(hwnd, hdc);
  13.               return 0;
复制代码



评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
小甲鱼 + 4 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 12:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表