有时候需要用到一些特殊的字体,而用户的机器上可能没有。把它永久安装到用户机器上,总会让人有点不爽,因为这些可能是很特殊的字体,比如是音标,或者液晶数字等用户平时根本就用不着的东东。这时候,程序运行的时候,把它们动态加载为临时字体,就是很好的选择了。
网上广泛流传的使用AddFontResource的方法,缺点比较多。一是,临时加载之后,除了自己的程序可以使用刚加载的字体之外,其它程序,比如记事本,在字体列表中也会发现这个字体也被加了进来,这种私有性,就不是很好了。二,就是,这种办法,最大的弊病就是,当非正常退出(比如用任务管理器杀掉)时,可能会调用不到RemoveFontResource,字体就保留下来了,但是之后就会发现再次AddFontResource时会失败,而且其它程序,也无法使用这种字体了(但是还可以在字体列表中见到)。(ps.重启计算机才可让此字体消失)
回到主题上来,最有效的办法是什么呢?方法之一,用AddFontMemResourceEx从资源加载字体
MSDN上面说了,This function allows an application to get a font that is embedded in a document or a Web page. A font that is added by AddFontMemResourceEx is always private to the process that made the call and is not enumerable.
也就是加载的字体为进程私有,在系统字体列表中不可枚举
这种情况下,如果不调用与之配对的RemoveFontMemResourceEx,临时字体也会被销毁,第二次使用时也完全不会出问题
附代码:
void InstallFont()
{
HINSTANCE hResInstance = AfxGetResourceHandle( );
HRSRC res = FindResource(hResInstance,
MAKEINTRESOURCE(IDR_FONT_PHONETIC),
_T(“BINARY”));
if(res)
{
HGLOBAL mem = LoadResource(hResInstance, res);
void *data = LockResource(mem);
DWORD len = SizeofResource(hResInstance, res);
DWORD nFonts;
m_hFont = AddFontMemResourceEx(
data, // font resource
len, // number of bytes in font resource
NULL, // Reserved. Must be 0.
&nFonts); // number of fonts installed
if(!m_hFont)
AfxMessageBox(_T(“字体加载失败!”));
}
}
当然,还有方法之二,就是使用AddFontResourceEx从文件加载字体
参数指定FR_PRIVATE就是私有的了
特别提示:
以上提到的函数都是win2k以上系统才支持的,所以尤其是在用VC6的时候,要在stdAfx.h的所有#include 的上方,加上#define _WIN32_WINNT 0×0500 (不然编译器会提示这些函数未定义)


看你很久没更新了。我换了…你知道我是谁不?
不要以为穿个马甲我就不认识你了,solo
没更新,也是找不到写的,才没更新。其实一直计划着写下一个软件的发布来着,结果暑假效率真赶不上平时…
看来你回来耍爽了。
确实好久没更新了呢 只是太专业了看不懂 哈哈
kita也出現了,話說能不能專門連接一個字庫,裡面只是存在那些特殊字符,隨便說說的。
還有七夕快樂哦
1、用字体必须要用MS给我提供的方法,不然那就太复杂了
2、七夕、214,对我来说,都是陌生字眼
技术文,想当初偶也折腾了好久VC呢。。看MSDN看的头大
虽然看起来还是不顺,不过还好习惯了
没有想到还能这样
好久没用vc了
你最近更新怎么也这么慢了?
我也不知道
各种懒,暑假没有状态
夏日来到您这真凉爽啊。呵呵
谷歌不是有在线字体嚒~
不是WEB程序,是运行在本地的软件
我从来没有过显示自定义字体的软件,还不知道有这么一回事..
PS:我的那个东西由于被人指责损害其开发公司利益而进入地下传播了,囧
1、有些特殊字体,自己画,或者用图片都很麻烦,只有用字体文件了
2、什么东西?
我觉得,还是最好不要让和自己关系不熟的人知道你的的博客地址
…原来我和你关系很熟…我可是知道你的博客地址哦~!
原来?
你难道是已经消失了的那个beyondc的博主?
我发现我的话有歧义,
我不是…
我的意思是
最好不要让(公司里面)和自己关系不熟的人知道你的的博客地址
恩,确实应该这样,不过应该是生活中的人,而不是单单是公司
太高深了,还没研究到那种地步,更没试过创建临时字体库,几乎搞不懂……
嗯,你说的”用任务管理器杀掉时,可能会调用不到RemoveFontResource,字体就保留下来了”"是字体的文件还一直占据在内存中导致字体资源无法被访问了,还是那是一个接口,只不过是进程没杀完,第二次调用时拒绝了?
简单地说,那种方式相当于是全局地使用字体,非正常退出时,不会通知系统清除那种字体,以后就会出现问题
来增加增加人气!
西瓜兄还是这么V5!~
虽然看过C,不过看不懂!
R语言样品比较应用举例
http://wenku.baidu.com/view/134d4d1f59eef8c75fbfb337.html
R语言是一种专门用于统计学数据分析的编程语言,是深受使用者喜欢的工具。
它组合了SAS和MATLAB所有功能,和PERL一样免费。因而统计工作者为提高工
作效率没有理由不学会使用R语言 R语言在统计学中运用非常广泛,可用来进
行单样品检测数据分析、双样品检测数据分析、配对测试数据分析、多样品
比较数据分析、组合对比数据分析、线性回归比较数据分析、单样品总体检
验数据分析、双样品总体检验数据分析、配对样品总体比较数据分析。
r语言教程 r语言与统计分析
r语言 函数 r语言 作图 r语言入门教程 r语言 循环 r语言 颜色