前两天发了一个同样的贴,分送了,但问题没有解决。
我得到GDI+的字体Font的字符宽度,但用GDI+的GetLogFontA得到的宽度是0.而GDI的方法取得字体宽度的方法非常多,我就想创建一个跟Font一样大小的字体CFont,在CFont里取得字体宽度,相当于取得了Font字体的宽度,问题怎样创建一样大小的字体?
其实我想得到的是字符串的长度,而不是字体。//gdi获得字体宽度的方法
CClientDC   dc(this);  
CFont  font;  
font.CreatePointFont(48, L"Arial");
dc.SelectObject(font);       
CSize   size= dc.GetTextExtent(L"字体大小");//运行后发现48大小的字体非常小//GDI+
FontFamily fontFamily(L"Arial");//选择一种字体
Gdiplus::Font fontMsg(&fontFamily, 48, FontStyleRegular,UnitPoint);//创建一种字体
//运行后发现,48大小的字体非常大。第四个参数改成下面 Unit的任何一种,都比gdi 48的字体大。
//typedef enum {
// UnitWorld = 0,
// UnitDisplay = 1,
// UnitPixel = 2,
// UnitPoint = 3,
// UnitInch = 4,
// UnitDocument = 5,
// UnitMillimeter = 6
//} Unit;

解决方案 »

  1.   

    BOOL CreatePointFont(
       int nPointSize,
       LPCTSTR lpszFaceName,
       CDC* pDC = NULL 
    );nPointSize
    Requested font height in tenths of a point. (For instance, pass 120 to request a 12-point font.)
      

  2.   

    获取字符串长度的确是GetTextExtent和GetTextExtentPoint系列的函数。
      

  3.   

    先等我调试。我感觉的字号GDI 300比GDI+ 30要短
      

  4.   

    font.CreatePointFont(48, L"Arial"); 
    中的48在实际会之中是4.8这个参数是取其1/10为其字体大小,不是通常一以上的48px或48pt~所以,你要画48px或48pt的字体,就要把这个参数设置为480
      

  5.   

    刚才对比了一下, 字体都是Arial,当显示字符时,确实是10比1。但显示中文时,要达到同样长度,字号比例是13比1.