CString GetCurrentModuleDir()
{
TCHAR szPath[MAX_PATH + 1] = { 0 };
if (0 == ::GetModuleFileName((HMODULE)&__ImageBase, szPath, MAX_PATH))
return L"";
::PathRemoveFileSpec(szPath);
CString strDir = szPath;
return strDir;
}
void PathAddBackslashEx(CString& strPath)
{
CString strTemp;
strTemp = strPath.Right(1);
if (strTemp != _T("\\") && strTemp != _T("/"))
strPath.Append(_T("\\"));
}
void RegisterPermanentFonts(const CString& strFontName, const CString& strFontFileName)
{
//获取字体文件路径,假定字体文件放在exe的同级目录
CString strExistingFilePath = GetCurrentModuleDir() + strFontFileName;
if (FALSE == ::PathFileExists(strExistingFilePath))
return;
WCHAR szFontDir[MAX_PATH] = { 0 };
SHGetFolderPath(NULL, CSIDL_FONTS, NULL, 0, szFontDir);
CString strFontDir = szFontDir;
PathAddBackslashEx(strFontDir);
CString strNewFilePath = strFontDir + strFontFileName;
//1. 拷贝字体文件
::CopyFile(strExistingFilePath, strNewFilePath, FALSE);
//临时加入生效
AddFontResource(strFontFileName);
//永久使用注册
CRegKey reg;
LONG lRet=0;
lRet = reg.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"), KEY_READ | KEY_WRITE);
if (lRet == ERROR_SUCCESS)
{
CString strFullFontName = strFontName;
strFullFontName += _T(" (TrueType)");
reg.SetStringValue(strFontName, strFontFileName);
}
reg.Close();
//发广播通知,超时退出
::SendMessageTimeout(HWND_BROADCAST, WM_FONTCHANGE, 0, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 5000, NULL);
}
int _tmain(int argc, _TCHAR* argv[])
{
RegisterPermanentFonts(L"XXXXXXX", L"XXXXXXX.ttf");
return 0;
}
新字体的永久注册
最新推荐文章于 2022-01-19 17:24:38 发布