zoukankan      html  css  js  c++  java
  • GDI中获取字符串精确绘制范围的两种做法比较

    作者:朱金灿
    来源:http://blog.csdn.net/clever101


           应该说这不是一个高深的问题,不过研究下来还是有一点收获。首先说说为什么要获取字符串的精确绘制范围,这个主要是为了提高绘图效率,比如我们绘图时只是修改某个区域的字符串,在这种情况下更新整个客户区肯定是不合理,因此获取精确的范围进行更新是一种通行的做法。


            经过搜索,我发现GDI中获取字符串精确绘制范围的做法有两种,一是使用CDC类的GetTextExtent函数;另一种方法是petzod的《Windows程序设计》中的第四章输出文字介绍的方法,简单来说就是获取每个字符的宽高,然后进行计算。为此我写了两个函数:



          一般来说大家可能倾向于使用第一种方法,即使用CDC类GetTextExtent接口获取字符串的精确的区域大小。但是我经过多次测试发现,如果绘制的字符串为全英文是,第二种方法的效果更好。在全英文的情况下,在常规字形下通过两种方法获取区域进行绘制效果没有差别,但是在斜体字形下,使用CDC类GetTextExtent接口是下面的效果:


    使用CDC类GetTextExtent


    而使用GetCharExtent2是下面的效果:


    GetCharExtent2


          显然使用GetCharExtent2函数的效果更好。


         接着进行更多的测试,发现如果字符串是全中文的话一定要用CDC类GetTextExtent接口,petzold的方法看来是不适用中文,另外如果字符串是中英文结合的话,也必须用CDC类GetTextExtent接口。












  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470984.html
Copyright © 2011-2022 走看看