我在View的OnDraw函数中,调用GetTextExtent计算文字的宽度时,结果是正确的。而在View的其他函数中,使用GetDC()得到CDC指针,再使用GetTextExtent计算文字的宽度时,发现两者有差异,后面的算法存在一些误差。我在其他函数中计算文字宽度前已经同OnDraw中一样,设定好了字体了,设置也一样,可为什么后者计算出来的宽度不正确呢?后者比前者稍微大一点儿,短字符串看不出来,长字符串就比较明显了。还有奇怪的是,当字体高度在30和60的时候,计算结果基本正确,在高度为50的时候,不正确。谁能告诉我,这是为什么?谢谢!

解决方案 »

  1.   

    CView在客户区,应该调用 GetClientDC()函数,不可以直接使用GetDC().GetDC是获取的整个的窗口的设备上下文。
      

  2.   

    To:sunrise(日出江花红胜火)     我觉得你说的有道理,但是没有GetClientDC()函数啊(相关类中都没有这个方法),我只找到了一个GetDCEx函数,用了后也不对。    能再说说吗?
      

  3.   

    是我的回答错误,抱歉。
    在此,正确的如下:
    建立一个CClientDC 类对象CClientDC dc(this);//这个dc对象就是你的View的客户区的设备上下文对象。
    OnPrepareDC(&dc);   
    ......
    //就可以使用此对象来获取字符的宽度了