当创建一种字体m_font后,然后dc.SelectObject(&m_font);选进DC后,在这个dc中可以输出一个字符串,怎么确定这串字符的宽度呢?
选用不同的字体,字符串的总宽度是不同的,字符串中含有英文字符还有数字,这些字符的宽度也各不相同,怎么确定这串字符的宽度呢?
对了,是象素!

解决方案 »

  1.   

    1.得到一个字符的宽度
    TEXTMETRIC  tm ;
    hdc = GetDC (hwnd) ;
    GetTextMetrics (hdc, &tm) ;
    cxChar = tm.tmAveCharWidth ;2.计算字符串中有多少个汉字(chs), 大写(upper), 小写(lower), 数字(number).
    3.则宽度为 cxChar * (2 * chs + 3 * upper / 2 + lower + number)
      

  2.   

    没有楼上说的那么复杂!!!!
    得到一个字符的宽度当然是用GetTextMetrics 
    获得字符串的宽度直接用GetTextExtent();
    但现在的问题是:
    创建一个字体对话框,然后从中选择一中字体和大小之后,将这种字体选进dc中,由于'w'和'i'以及'2'宽度可能不同,所有我用CSize size = GetTextExtent(&str)获得字符串的总宽度,但是问题是我让str = "32oC";
    然后我用AfxMessageBox("%d",size.cx);它输出的大小和我在屏幕上看到的大小有很大的出入。比如它输出16,但我看到的实际大小远远超过16个象素.(GetTextExtent返回的逻辑单位,但默认映射模式是MM-TEXT,所以逻辑单位应该等于象素啊)?
    请问可能是什么原因啊?
      

  3.   

    用drawtext不就行吗?
    有个dt_calcrect