|

楼主 |
发表于 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;
} |
|