热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MFC用代码安装卸载矢量字体

具体代码在下面有贴出。具体工程下载:下载地址安装代码:voidCInstallFontDemoDlg::OnBnClickedButton1()安装

具体代码在下面有贴出。具体工程下载:下载地址

安装代码:

void CInstallFontDemoDlg::OnBnClickedButton1()//安装字体
{CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Font File(*.ttf)|*.ttf; |Font File(*.otf)|*.otf; ||"), NULL);if (dlg.DoModal() !&#61; IDOK)return;CString strPath &#61; dlg.GetPathName();// 文件名int nIndex &#61; strPath.ReverseFind(&#39;\\&#39;);CString strFileName &#61; strPath.Right(strPath.GetLength() - nIndex - 1);// 字体名nIndex &#61; strFileName.ReverseFind(&#39;.&#39;);CString strFontName &#61; strFileName.Left(nIndex);// 系统字体路径TCHAR szWinDir[MAX_PATH] &#61; { NULL };GetWindowsDirectory(szWinDir, MAX_PATH);CString strSysFontPath(szWinDir);strSysFontPath &#43;&#61; _T("\\Fonts\\");CString strSysFontInstall &#61; strSysFontPath &#43; strFileName;// 拷贝字体到系统字体目录&#xff0c;操作需要程序具有管理员权限if (!CopyFile(strPath, strSysFontInstall, FALSE)){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("拷贝字体到系统字体目录失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 添加字体到系统字体库&#xff0c;操作需要程序具有管理员权限int _nFontNum &#61; AddFontResource(strSysFontInstall);if (_nFontNum <&#61; 0){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("添加字体到系统字体库失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 向注册表注册字体&#xff0c;操作需要程序具有管理员权限HKEY phkResult;DWORD dwRegResult &#61; 0;RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"),0, _T("REG_SZ"), 0, KEY_WRITE, 0, &phkResult, &dwRegResult);RegSetValueEx(phkResult, strFontName, 0, REG_SZ, (LPBYTE)strFileName.GetBuffer(), (_tcslen(strFileName) &#43; 1) * sizeof(TCHAR));RegCloseKey(phkResult);// 让安装的字体立刻生效 注意消息要发送两次//::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);//::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);AfxMessageBox(_T("安装字体成功!"));
}

卸载代码&#xff1a;

void CInstallFontDemoDlg::OnBnClickedButton2()//卸载字体
{CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Font File(*.ttf)|*.ttf; |Font File(*.otf)|*.otf; ||"), NULL);if (dlg.DoModal() !&#61; IDOK)return;CString strPath &#61; dlg.GetPathName();// 文件名int nIndex &#61; strPath.ReverseFind(&#39;\\&#39;);CString strFileName &#61; strPath.Right(strPath.GetLength() - nIndex - 1);// 字体名nIndex &#61; strFileName.ReverseFind(&#39;.&#39;);CString strFontName &#61; strFileName.Left(nIndex);// 系统字体路径TCHAR szWinDir[MAX_PATH] &#61; { NULL };GetWindowsDirectory(szWinDir, MAX_PATH);CString strSysFontPath(szWinDir);strSysFontPath &#43;&#61; _T("\\Fonts\\");CString strSysFontInstall &#61; strSysFontPath &#43; strFileName;// 从系统字体库删除字体&#xff0c;先移除再删除&#xff0c;操作需要程序具有管理员权限if (!RemoveFontResource(strSysFontInstall)){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("从系统字体库删除字体失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 删除系统字体&#xff0c;操作需要程序具有管理员权限if (!DeleteFile(strSysFontInstall)){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("删除系统字体失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 向注册表删除字体&#xff0c;操作需要程序具有管理员权限HKEY phkResult;CString strKey &#61; _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts") ;LSTATUS st &#61; RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0, KEY_QUERY_VALUE | KEY_WRITE, &phkResult);if (st &#61;&#61; ERROR_SUCCESS){st &#61; RegDeleteValue(phkResult, strFontName);RegCloseKey(phkResult);AfxMessageBox(_T("卸载字体成功!"));}
}

 


推荐阅读
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
author-avatar
愛攝影的新胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有