游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2131|回复: 4

请教怎样确定字符串的象素宽度!

[复制链接]

19

主题

64

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2005-6-23 15:41:00 | 显示全部楼层 |阅读模式
我用DrawText显示文字,并约定每行只显示20个中文字符。如此就需要得到20个中文字符所占的象素宽度。我用了以下两种方法,但均不够理想。
(1)用TEXTMETRIC

        TEXTMETRIC  tm ;
        int width=tm.tmAveCharWidth*40;    //20个中文字符为40个西文字符宽

(2)用GetTextExtentPoint32()

        char cc[255];
        ::memset(cc,97,255);    //cc为一串"a"
        SIZE size;
        ::GetTextExtentPoint32(dc,cc,40,&size);
        int width=size.cx;

方法一可能因为        tm.tmAveCharWidth不包括字符间距,运行的效果是显示字数每行不足20字。
方法二看似很合理,但运行结果是字数每行多于20字。

请问各位大虾,还有什么更好的方法?请赐教!

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-6-23 18:02:00 | 显示全部楼层

Re:请教怎样确定字符串的象素宽度!

我记得有个函数可以直接得到,俺回去找下书

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-6-23 19:18:00 | 显示全部楼层

Re:请教怎样确定字符串的象素宽度!

GetTextExtentPoint32
用这个WIN32 API

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-6-23 19:23:00 | 显示全部楼层

Re:请教怎样确定字符串的象素宽度!

有点误差,计算上要注意函数返回的位置是包含字体的那些部分

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-6-24 09:04:00 | 显示全部楼层

Re:请教怎样确定字符串的象素宽度!

System.Drawing.Graphics.MeasureString(...)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 03:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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