关于字体的困惑!!希望大家指点迷津!
在一个Print(CDC *pDC, CPrintInfo *pInfo)函数中有如下代码,意在改变当前字体用以打印:
CFont ft;
ft.CreatePointFont(120,"MS Sans Serif");
ft.GetLogFont(&lg);
pDC->SelectObject(&ft);
pDC->GetTextFace(str);
可是令人不解的是,str得到的却总是“宋体”,应该是"MS Sans Serif"才对??
为什么会这样希望大家指点指点,先谢了。
问题点数:30、回复次数:7Top
1 楼VCYang(雨杨)回复于 2006-03-06 15:15:42 得分 0
Print(CDC *pDC, CPrintInfo *pInfo)函数最开始写了段调试代码:
LOGFONT lf;
CString str;
pDC->GetCurrentFont()->GetLogFont(&lf);
pDC->GetTextFace(str);
中断后发现:
lf.lfFaceName = "System";
str = "宋体";
不明白此时pDC用的到底是哪种字体……Top
2 楼everandforever(Forever)回复于 2006-03-06 15:22:30 得分 5
看看打出来的英文字母是什么体的。
汉字肯定是宋体。Top
3 楼YufengShi(浪子)回复于 2006-03-06 15:32:24 得分 20
// This code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
CClientDC dc(this);
CFont font;
VERIFY(font.CreatePointFont(120, _T("Arial"), &dc));
// Use the font you just created.
CFont* def_font = dc.SelectObject(&font);
dc.ExtTextOut(5, 5, ETO_OPAQUE, NULL, _T("Hello"), NULL);
dc.SelectObject(def_font);
// Finished with the font, now delete the font object.
font.DeleteObject();
Top
4 楼wawaku(一堆裤衩!)回复于 2006-03-06 16:25:14 得分 5
关注中....Top
5 楼VCYang(雨杨)回复于 2006-03-06 16:30:18 得分 0
找到原因了:
原来使用"MS Sans Serif"创建字体时,并没有创建成功,但是CreatePointFont仍然返回1。
而且GetLogFont(&lg)查看该字体的名称也填充了"MS Sans Serif"!给人以错觉,以为成功了。
可是系统却使用了默认字体,于是出现了str得到的是“宋体”。
只有当使用无效字体时,系统才会使用默认字体,可见"MS Sans Serif"是个错误的字体名称。
正确的应该使用"Microsoft Sans Serif"创建字体,这时pDC->GetTextFace(str);
str得到的才是"Microsoft Sans Serif"。
Top
6 楼VCYang(雨杨)回复于 2006-03-06 17:33:49 得分 0
不知道我的结论是否正确,有没有人使用"MS Sans Serif"成功创建字体?
Top
7 楼VCYang(雨杨)回复于 2006-03-07 11:10:58 得分 0
经过进一步求证,得知:
MS Sans Serif 是早先的bitmap字体,适合用于屏幕显示
Microsoft Sans Serif 是新近的TrueType字体, 适合用于屏幕显示和打印。
在打印时由于选择的Bitmap字体MS Sans Serif,不适合打印,系统自动选择了默认字体进行打印。所以在OnDraw中使用MS Sans Serif字体时没有问题的,而在OnPrint中就不能使用该字体了,应该选用适合打印的TrueType字体。Top




