BngThea 发表于 2017-7-11 12:18:18

《Windows SDK》010 不要试图猜测文本的尺寸

本帖最后由 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设置行间距的代码如下

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

      switch (message)
      {
      case WM_CREATE:
            hdc = GetDC(hwnd);
            GetTextMetrics(hdc, &tm); //填充tm参数
            cxChar = tm.tmAveCharWidth; //设置字符在x方向的占位
            cyChar = tm.tmHeight + tm.tmExternalLeading; //设置行距
            ReleaseDC(hwnd, hdc);
            return 0;


页: [1]
查看完整版本: 《Windows SDK》010 不要试图猜测文本的尺寸