VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 444|回复: 5

[求助] 怎么安装字体?

[复制链接]
51_avatar_middle
在线会员 发表于 2018-12-22 22:29:48 | 显示全部楼层 |阅读模式
3驿站币
int a= AddFontResource((LPCWSTR)L"C:\\仿宋_GB2312.TTF");

为什么安装不了字体呢?





上一篇:select困惑
下一篇:c++ primer plus第六版290页,完全匹配允许的无关紧要转换
51_avatar_middle
online_admins 发表于 2018-12-22 23:10:27 | 显示全部楼层
判断下返回值是不是0,如果是0的话,调用下 GetLastErrorl 看看错误码是多少?大概先确定下原因
51_avatar_middle
ico_lz  楼主| 发表于 2018-12-23 00:38:21 | 显示全部楼层
是2,只是可以临时使用,重启电脑就没有了,应该是要写注册表吧?
51_avatar_middle
online_admins 发表于 2018-12-23 02:07:11 | 显示全部楼层
AddFontMemResourceEx 这个函数有试过吗?
http://www.voidcn.com/article/p-wgotyjoq-ct.html
51_avatar_middle
ico_lz  楼主| 发表于 2018-12-23 12:11:55 | 显示全部楼层
Syc 发表于 2018-12-23 02:07
AddFontMemResourceEx 这个函数有试过吗?
http://www.voidcn.com/article/p-wgotyjoq-ct.html

我就是用的这个扩展函数,可以临时注册,安装字体后.word等都可以看到新字体,但是重启电脑后就字体就没有了,看样子必须要在注册表注册字体才行.
51_avatar_middle
ico_lz  楼主| 发表于 2018-12-24 00:10:57 | 显示全部楼层
这样没问题了.怎么安装字体? AddFontResourceEX这个函数不生效.

BOOL ReleaseRes(CString strFileName, WORD wResID, CString strFileType);

void CMFCApplication1Dlg::OnBnClickedButtonsifang()
{
        //释放资源
        ReleaseRes(L"C:\\Windows\\Fonts\\方正小标宋简体.TTF", (WORD)IDR_TTF1, L"TTF");
        ReleaseRes(L"C:\\Windows\\Fonts\\仿宋_GB2312.TTF", (WORD)IDR_TTF2, L"TTF");
        //添加到指定的文件到系统字体
        AddFontResourceA((LPCSTR)L"C:\\Windows\\Fonts\\方正小标宋简体.TTF");
        AddFontResourceA((LPCSTR)L"C:\\Windows\\Fonts\\仿宋_GB2312.TTF");
        HKEY  phkResult = NULL;
        //打开注册表
        LSTATUS  openkey= RegOpenKeyEx (HKEY_LOCAL_MACHINE, (LPCWSTR)L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\fonts", 0, KEY_ALL_ACCESS, &phkResult);
if (openkey == ERROR_SUCCESS) //返回0表示成功
        {
        //注册表设置指定值的数据和类型
        CString strPath = _T("方正小标宋简体.TTF");
        RegSetValueEx(phkResult, _T("方正小标宋简体 (TrueType)"), 0, REG_SZ, (LPBYTE)strPath.GetBuffer(), strPath.GetLength() * sizeof(TCHAR));

         strPath = _T("仿宋_GB2312.TTF");
        RegSetValueEx(phkResult, _T("仿宋_GB2312 (TrueType)"), 0, REG_SZ, (LPBYTE)strPath.GetBuffer(), strPath.GetLength() * sizeof(TCHAR));
        RegCloseKey(phkResult);
        }

}

BOOL ReleaseRes(CString strFileName, WORD wResID, CString strFileType)
{
        // 资源大小
        DWORD        dwWrite = 0;

        // 创建文件
        HANDLE        hFile = CreateFile(strFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
                CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile == INVALID_HANDLE_VALUE)
        {
                return FALSE;
        }

        // 查找资源文件中、加载资源到内存、得到资源大小
        HRSRC        hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
        HGLOBAL hG = LoadResource(NULL, hrsc);
        DWORD        dwSize = SizeofResource(NULL, hrsc);

        // 写入文件
        WriteFile(hFile, hG, dwSize, &dwWrite, NULL);
        CloseHandle(hFile);
        return TRUE;
}
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-10-18 15:35

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表