马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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设置行间距的代码如下 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;
|