更新时间: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;
参数说明如下: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;
}
代码运行图:
相关资讯