QQ登录

只需一步,快速开始

搜索
鱼C论坛笔记大赛成绩公示
查看: 137|回复: 0

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

[复制链接]
最佳答案
4 
累计签到:101 天
连续签到:2 天
发表于 2017-7-11 12:18:18 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-9-26 07:59 Powered by Discuz! X2.5 Theme by dreambred

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