我得到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.)
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
中的48在实际会之中是4.8
这个参数是取其1/10为其字体大小,不是通常一以上的48px或48pt~
所以,你要画48px或48pt的字体,就要把这个参数设置为480
#5
刚才对比了一下, 字体都是Arial,当显示字符时,确实是10比1。但显示中文时,要达到同样长度,字号比例是13比1.
#6
字打错了。
但显示中文时,要达到同样长度,字号比例是11比1.
我想换成宋体,但是程序是给繁体电脑的用户用的,他们可能没有宋体。
但显示中文时,要达到同样长度,字号比例是11比1.
我想换成宋体,但是程序是给繁体电脑的用户用的,他们可能没有宋体。
#7
中文字体是一样的么?
#8
字体一样。但大小不一样。
没其他办法就用11倍计算,算长了总比算短了要好。
没其他办法就用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.)
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
中的48在实际会之中是4.8
这个参数是取其1/10为其字体大小,不是通常一以上的48px或48pt~
所以,你要画48px或48pt的字体,就要把这个参数设置为480
#5
刚才对比了一下, 字体都是Arial,当显示字符时,确实是10比1。但显示中文时,要达到同样长度,字号比例是13比1.
#6
字打错了。
但显示中文时,要达到同样长度,字号比例是11比1.
我想换成宋体,但是程序是给繁体电脑的用户用的,他们可能没有宋体。
但显示中文时,要达到同样长度,字号比例是11比1.
我想换成宋体,但是程序是给繁体电脑的用户用的,他们可能没有宋体。
#7
中文字体是一样的么?
#8
字体一样。但大小不一样。
没其他办法就用11倍计算,算长了总比算短了要好。
没其他办法就用11倍计算,算长了总比算短了要好。
#9
我也在弄这个问题
#10
我也在弄这个问题