问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

mfc c++如何加载使用自定义字体

发布网友 发布时间:2022-04-27 05:02

我来回答

3个回答

热心网友 时间:2022-06-26 15:59

1.在MFC下,可以使用CreateFont创建并加载字体。
BOOL CreateFont(
int nHeight,
int nWidth,
int nEscapement,
int nOrientation,
int nWeight,
BYTE bItalic,
BYTE bUnderline,
BYTE cStrikeOut,
BYTE nCharSet,
BYTE nOutPrecision,
BYTE nClipPrecision,
BYTE nQuality,
BYTE nPitchAndFamily,
LPCTSTR lpszFacename
);
通过指定的一些特征初始化CFont对象。下面分别介绍每个参数:
nHeight:指定字体高度(逻辑单位)。有三种取值:>0,字体映射器将高度值转换为设备单位,并与可用字体的字符元高度进行匹配;=0,字体映射器使用默认的高度值;<0,字体映射器将高度值转换为设备单位,用其绝对值与可用字体的字符高度进行匹配。nHeight转换后的绝对值不应超过16384个设备单位。
nWidth:指定字体中字符的平均宽度(逻辑单位)。
nEscapement:指定偏离垂线和显示界面X轴之间的角度,以十分之一度为单位。偏离垂线是穿过一行文本中第一个字符和最后一个字符的直线。
nOrientation:指定每个字符的基线和设备X轴之间的角度,以十分之一度为单位。
nWeight:指定字体磅数(每1000点中墨点像素数)。可取0到1000之间的任意整数值。
bItalic:指定字体是否为斜体。
bUnderline:指定字体是否带有下划线。
bStrikeOut:指定字体是否带有删除线。
nCharSet:指定字体的字符集。预定义的字符集:
ANSI_CHARSET;BALTIC_CHARSET;CHINESEBIG5_CHARSET;DEFAULT_CHARSET;EASTEUROPE_CHARSET; GB2312_CHARSET; GREEK_CHARSET;HANGUL_CHARSET; MAC_CHARSET; OEM_CHARSET; RUSSIAN_CHARSET; SHIFTJIS_CHARSET;SYMBOL_CHARSET; TURKISH_CHARSET。韩国Windows:JOHAB_CHARSET;中东地区Windows:HEBREW_CHARSSET,ARABIC_CHARSET;泰国Windows:THAI_CHARSET。应用程序可以使用DEFAULT_CHARSET以允许字体名和大小完全指定逻辑字体,如果指定的字体名不存在则可能会用任意字符集的字体来代替,所以为避免不可预料的结果,应谨慎使用DEFAULT_CHARSET。
nOutPrecision:指定输出精度。输出精度定义了输出与要求的字体高度、宽度、字符方向、移位和间距等的接近程度。它的取值及含义如下(只能取其一):
OUT_CHARACTER_PRECIS;未用。
OUT_DEFAULT_PRECIS:指定缺省的字体映射器状态。
OUT_DEVICE_PRECIS:在当系统里有多种字体使用同一个名字时指示字体映射器选择一种设备字体。
OUT_OUTLINE_PRCIS:在Windows NT中此值指示字体映射器从TrueType和其他基于边框的字体中选择。
OUT_RASTER_PRECIS:在当系统里有多种字体使用同一个名字时指示字体映射器选择一种光栅字体。
OUT_STRING_PRECIS:此值没有被字体映射器使用,但是当列举光栅字体时它会被返回。
OUT_STROKE_PRECIS:没有被字体映射器使用,但是当列举TrueType字体、其他基于边框的字体和向量字体时它会被返回。
OUT_TT_ONLY_PRECIS:指示字体映射器仅从TrueType字体中选择,如果系统中没有安装TrueType字体,则字体映射返回缺省状态。
OUT_TT_PRECIS:在当系统里有多种同名的字体时指示字体映射器选择一种TrueType字体。当操作系统含有多种与指定名字同名的字体时,应用程序可以使用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值来控制字体映射器如何选择一种字体,例如,如果操作系统含有名字Symbol的光栅和TrueType两种字体,指定OUT_TT_PRECIS使字体映射器选择TrueType方式(指定OUT_TT_ONLY_PRECIS强制字体映射器选择一种TrueType字体,尽管这会给TrueType字体换一个名字)。
nClipPrecision:指定裁剪精度。裁剪精度定义了怎样裁剪部分超出裁剪区域的字符。它的取值及含义如下(可取一个或多个值):
CLIP_DEFAULT_PRECIS:指定缺省裁剪状态。
CLIP_CHARACTER_PRECIS:未用。
CLIP_STROKE_PRECIS:未被字体映射器使用,但是当列举光栅字体、向量字体或TrueType字体时它会被返回。在Windows环境下,为保证兼容性,当列举字体时这个值总被返回。
CLIP_MASK:未用。
CLIP_EMBEDDED:要使用嵌入式只读字体必须使用此标志。
CLIP_LH_ANGLES:当此值被使用时,所有字体的旋转依赖于坐标系统的定位是朝左的还是朝右的。如果未使用此值,设备字体总是逆时针方向旋转,但其他字体的旋转依赖于坐标系统的定向。
CLIP_TT_ALWAYS:未用。
nQuality:指定字体的输出质量。输出质量定义了GDI将逻辑字体属性匹配到实际物理字体的细致程度。它的各个取值及含义如下(取其一):
DEFAULT_QUALITY:字体的外观不重要。
DRAFT_QUALITY:字体外观的重要性次于使用PROOF_QUALITY时,对GDI光栅字体,缩放比例是活动的,这意味着多种字体大小可供选择,但质量可能不高,如果有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
PROOF_QUALITY:字符质量比精确匹配逻辑字体字体属性更重要。对GDI扫描字体,缩放比例是活动的,并选择最接近的大小。尽管当使用PROOF_QUALITY时,选择字体大小并不完全匹配,但字体的质量很高,并没有外观上的变形。如果有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
nPitchAndFamily:指定字体间距和字体族。低2位用来指定字体的间距,可取下列值中的一个:DEFAULT_PITCH,FIXED_PITCH,VARIABLE_PITCH。高4位指定字体族,取值及含义如下(取其一):
FF_DECORATIVE:新奇的字体,如老式英语(Old English)。
FF_DONTCARE:不关心或不知道。
FF_MDERN:笔划宽度固定的字体,有或者无衬线。如Pica、Elite和Courier New。
FF_ROMAN:笔划宽度变动的字体,有衬线。如MS Serif。
FF_SCRIPT:设计成看上去象手写体的字体。如Script和Cursive。
FF_SWISS:笔划宽度变动的字体,无斜线。如MS Sans Serif。
应用程序可以用运算符OR将字符间距和字体族组合起来给nPitchAndFamily赋值。
字体族描述一种字体的普通外观,当所有的精确字样都不能使用时,可用它们来指定字体。
lpszFacename:指定字体的字样名的字符串。此字符串的长度不应超过30个字符。Windows函数EnumFontFamilies可以枚举出当前所有可用字体的字样名。如果lpszFacename为NULL,则GDI使用一种与设备无关的字体。
返回值:此函数成功则返回TRUE,否则返回FALSE。
CreateFont函数初始化CFont对象后,此字体就能够被选作任何设备上下文的字体了。此函数并不会创建一个新的Windows GDI字体,只是从GDI的物理字体中选择了一个最匹配的字体。在创建一个逻辑字体时,大部分参数可以使用默认值,但一般情况下都会给出参数nHeight和lpszFacename的指定值,如果没有给nHeight和lpszFacename参数设定取值,则创建的逻辑字体与设备相关。当使用CreateFont函数初始化一个CFont对象完成后,就能够使用CDC::SelectObject函数来为设备上下文选择字体了,并且还能够在不再使用此CFont对象时删除它。

2.例子:

//下面的代码演示了如何实现字体的空心效果
//应用程序主窗口的重绘函数
void CMyWnd::OnPaint(){
    // 获得窗口的客户区设备上下文句柄
    CPaintDC dc(this); // 更改当前字体
    LOGFONT lf;
    dc.GetCurrentFont()- >GetLogFont(&lf);
    CFont font;
    CFont *pOldFont; // 保存设备上下文最初使用的字体对象
    lf.lfCharSet=134;
    lf.lfHeight=-150;
    lf.lfHeight=-150;
    lf.lfWidth=0;
    strcpy(lf.lfFaceName, "隶书");
    font.CreateFontIndirect( &lf);
    pOldFont=dc.SelectObject( &font);
    dc.SetBkMode(TRANSPARENT); // 更改当前画笔
    CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
    CPen *pOldPen;
    pOldPen=dc.SelectObject( &pen); // 开始一个路径
    dc.BeginPath();
    dc.TextOut(10, 10, "空心字");
    dc.EndPath(); // 绘制路径
    dc.StrokePath();
    //可以用dc.StrokeAndFillPath()函数来代替,不过该函数会使用当前刷子填充路径的内部。
    dc.SelectObject(pOldFont);
    dc.SelectObject(pOldPen);
}

热心网友 时间:2022-06-26 16:00

下面例子是装(调)入MS Song 中文字体。
关键语句:
font.CreateFontIndirect(&lf); // 建字体
oldfont = pDC->SelectObject(&font); //用字体

LOGFONT lf;
lf.lfHeight = 240;
lf.lfWidth = 120;
lf.lfEscapement = m_ang;
lf.lfOrientation = m_ang;
lf.lfWeight = 520;
lf.lfItalic = 0;
lf.lfUnderline = 0;
lf.lfStrikeOut = 0;
lf.lfCharSet = GB2312_CHARSET;
lf.lfOutPrecision = 0;
lf.lfClipPrecision = CLIP_STROKE_PRECIS;
lf.lfQuality = 0;
lf.lfPitchAndFamily = 0;
strcpy(lf.lfFaceName, "MS Song");
font.CreateFontIndirect(&lf);
oldfont = pDC->SelectObject(&font);
TextOut后,就是 MS Song 中文 字符。

热心网友 时间:2022-06-26 16:00

将你的字库文件放到Windows的Fonts文件夹里
然后用CFont对象加载你的字体
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
三国版单机攻城游戏有哪些 三国大时代什么兵种攻城最快 光荣经典街机介绍_光荣经典街机是什么 三国志大战 三国志大战华为账号怎么退出? 三国志大战腾讯游戏安卓APK如何下载 三国志大战九游版 热溶胶书刊装订用热熔胶 月饼包装纸热封胶主要性能指标有哪些 西安交通大学最好的专业是什 湖南科技大学考研哪个专业最好 博士学什么专业好 数位板有无线功能的能上网吗? 圣诞节卖苹果上的印记怎么做出来 市场上买的速冻蛋饺要洗吗? 影拓5数位板怎么连无线 如何在ug8.0建模上插入苹果公司商标 数位板的无线模块是干嘛的?如果没有的话 数位板会怎么样 苹果圣诞节快乐上字怎么快速清理掉? 无源无线数位板 数位板为什么需要电池? 如何进行无线操作 mac怎么在文档中换华文彩云 mac word空心字怎么设置 我已经收拾完我们的箱子了,我和妈妈明天要去度假 刚收拾完,有啥好激动的?下一句怎么回复 屋里床乱,收拾干净了,完了,又整乱了,用什么成语表白? 然后我收拾完了我的房间 如何翻译 鱼收拾完了,明天早上做,用不用放在冰箱里 学生平安保险 交通事故 胖头鱼收拾完了为什么脑袋都红了呢? 学生平安保险保单查询? 鱼收拾完了,有事做不了,怎么存放? 用猪肉馅包饺子冷冻再融化后有血水需要用水清洗吗? 带字的平安果是怎么刻上的 绘王HS611数位板可以无线吗? 数位板无线功能无法使用 数位板Wacom Bamboo ctl 671能用无线套件吗 苹果AppleTV字体 方正飞腾是做什么用的? wacom影拓5PTK-450 怎么安装无线模组 为什么我新买的华为荣耀50拍的抖音视频没有保存本地功能? 煮速冻饺子时,需要注意哪些问题? 有没有专门推送创业商机和创业项目的?找了半天只找到amor创业,非常棒,希望还能有其他的 哪里可以找到现成的教育行业微信爆文? 有哪些电视剧行业类的 哪个工具可以找到冷门行业的微信文章? 翡翠怎么辩真假? 翡翠、玉怎麼辩别真假呢? 从什么网站可以查到工商营业执照 为什么华为畅享10plus保存不了抖音视频? 女性洗外阴前可以用香皂洗手吗 请问女生下半身如何清洗,用手加上沐浴剂去搓洗肛门之后,总是先要用...
  • 焦点

最新推荐

猜你喜欢

热门推荐