当前位置:C++技术网 > 资讯 > 想不想知道你电脑上已安装的字体有哪些?

想不想知道你电脑上已安装的字体有哪些?

更新时间:2015-11-30 23:27:07浏览次数:1+次

之所以写这篇文章,就是因为我被坑了!其实是这样的,我在写《文字特效处理原理解析》代码时,用的字体不是"Arial",而是华文正楷,结果没有显示出任何的东西。窗口没有输出。断点调试失败!因为我用的是VS13,我就改为VC6.0编译,结果失败!然后一直都在纠结。最后灵光一闪,我就换了个输出的字体类型。好家伙,一运行成了!于是就有了这篇文章。当我们做GDI+程序的时候,尤其是用字体输出,你不知道你输出的字体的类型是不是在你的电脑已安装的字体上。你想不想知道你电脑上安装的字体呢?

在常见的文档编辑软件中,都提供了使用字体选择对话框设置字体的功能。字体选择对话框只持续多余字体社hi在相关的操作。下面我们示例如何获取系统中已安装的所有字体。计算机系统的目录下都有一个存放字体文件的目录(如:C:\\WINDOWS\Fonts),该目录下的字体文件对应于所有可供使用的字体。在GDI+中,通过InstalledFontCollection(已安装字体集合)类的成员函数GetFamilyCount(获取字体总数),可以列出系统中安装的字体总数。(系统中已安装的字体仅限于已经在注册表中进行注册的字体)

用户也可以通过InstalledFontCollection类的成员函数GetFamilies(获取字体信息)枚举安装在计算机上的所有字体。GetFamilies函数返回的是一个FontFamily对象的数组。所以,在使用GetFamilies前,应该为FontFamily数组分配足够的内存空间。GetFamilies函数的调用格式为:

Status GetFamilies(INT numSought,FontFamily* gpfamilies,INT* numFound)const;
参数说明如下:
numSought,numFound:字体集中的字体系列的总数。
gpfamilies:存储所有已安装字体系列的数组。
代码实现将当前系统中安装的所有字体名全部输出在当前窗口中。
新建GDI+工程,在菜单下新建一个菜单项“枚举已安装的字体”,再在下面新建一个子菜单项“获取字体”,并建立消息响应:
void CTextRanderingView::OnInstalledfont()
{
	// TODO:  在此添加命令处理程序代码
	FILE* stream1;
	Graphics graphics(this->m_hWnd);
	this->RedrawWindow();
	SolidBrush solidbrush(Color(255, 0, 0, 0));
	FontFamily fontfamily(L"Arial");
	Gdiplus::Font font(&fontfamily, 8, FontStyleRegular, UnitPoint);
	INT count = 0;
	INT found = 0;
	WCHAR *familyList=NULL;
	WCHAR familyName[50];
	FontFamily pFontFamily[500];
	CRect rect;
	this->GetClientRect(&rect);
	RectF r(0, 0, rect.Width(), rect.Height());
	InstalledFontCollection installedFontCollection;
	count = installedFontCollection.GetFamilyCount(); 
	installedFontCollection.GetFamilies(count, pFontFamily, &found);
	familyList = new WCHAR[count*sizeof(familyName)];
	wcscpy_s(familyList, count*sizeof(familyName), L" ");
	for (INT i = 1; i < count; ++i)
	{
		pFontFamily[i].GetFamilyName(familyName);
		wcscat_s(familyList, count*sizeof(familyName), familyName);
		wcscat_s(familyList, count*sizeof(familyName), L",   ");
	}
	graphics.DrawString(familyList, -1, &font, r, NULL, &solidbrush);
	//delete[] familyList;
}
代码运行图: