GDI+的Font字体大小和GDI的CFont字体大小是什么关系?

时间:2021-07-16 00:52:20
前两天发了一个同样的贴,分送了,但问题没有解决。
我得到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;

10 个解决方案

#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. 

#6


字打错了。
但显示中文时,要达到同样长度,字号比例是11比1. 

我想换成宋体,但是程序是给繁体电脑的用户用的,他们可能没有宋体。

#7


中文字体是一样的么?

#8


字体一样。但大小不一样。
没其他办法就用11倍计算,算长了总比算短了要好。

#9


我也在弄这个问题

#10


我也在弄这个问题

#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. 

#6


字打错了。
但显示中文时,要达到同样长度,字号比例是11比1. 

我想换成宋体,但是程序是给繁体电脑的用户用的,他们可能没有宋体。

#7


中文字体是一样的么?

#8


字体一样。但大小不一样。
没其他办法就用11倍计算,算长了总比算短了要好。

#9


我也在弄这个问题

#10


我也在弄这个问题