高分求助:如何获得变宽字体的确切宽度?
大家知道,现在的系统字体已经是变宽字体了,尤其是用CreateFontIndirect建立的逻辑字体,很多都是TureType字体,更是变宽字体。
可是用GetTextMetrics只能获得当前字体的平均宽度,这样在编程中就会造成很大的麻烦:比如我想做一个字处理软件,输入一段句子:
Texitksjdklsldfowewwwwwwwiiiiii
现在要把鼠标的光标定位在某个字符前面,当点击鼠标的时候,程序要根据鼠标点击时的位置,找到对点的字符,然后把插入指示插在那个地方。这样就需要每个字体的确切宽度。只有“平均宽度”是不行的。(w比i要宽得多,如果前面都是w,或都是i,用平均宽度就会出现很大的误差)。
请问,用哪一个函数可以找到当前字体中某个字符的确切宽度?
请高手指点,万分感谢!
[解决办法]
这个函数能不能满足楼主要求?
CDC::GetTextExtentCSize GetTextExtent( LPCTSTR lpszString, int nCount ) const;CSize GetTextExtent( const CString& str ) const;Return ValueThe dimensions of the string (in logical units) in a CSize object.ParameterslpszStringPoints to a string of characters. You can also pass a CString object for this parameter.nCountSpecifies the number of characters in the string.str A CString object that contains the specified characters.RemarksCall this member function to compute the width and height of a line of text using the current font to determine the dimensions. The information is retrieved from m_hAttribDC, the attribute device context. The current clipping region does not affect the width and height returned by GetTextExtent.Since some devices do not place characters in regular cell arrays (that is, they carry out kerning), the sum of the extents of the characters in a string may not be equal to the extent of the string.
[解决办法]
用CreateFontIndirect创建字体后,然后SelectObject把字体选人DC,再调用GetTextMetrics获取字符的信息。你看看TEXTMETRIC结构的各字段的含义。
这个链接是有关字体的API和结构,你看看有用不。
http://bbs.51cto.com/thread-584018-1.html