MFC笔记:从资源文件获取字体
来源:互联网 发布:双色球数据库查询系统 编辑:程序博客网 时间:2024/06/08 12:42
做菜单的时候遇到的一个问题,为了匹配菜单风格,需要一些特殊字体,但是客户的系统里面不一定会有这些字体,而我也不希望我们软件的字体会出现在客户的字体菜单中。因此找了个让字体加载进资源文件,从资源文件读取字体的办法。
需要注意的是hResInstance是指向包含资源的模块句柄。一开始开发的时候,自绘菜单类、调用菜单的对话框类和资源类在同一个项目中,所以可以用HINSTANCE hResInstance = AfxGetResourceHandle( );直接获取本程序的资源句柄,貌似用AfxGetApp()->m_hInstance也是一样的。
后来自绘菜单类封装成dll(MenuLibrary.dll)后,从另一个项目调用菜单dll,那么hResInstance读到的就是对话框的句柄,因此需要指定自绘菜单类的dll的句柄HINSTANCE hResInstance = GetModuleHandle(_T("MenuLibrary.dll"));。
当然为了防止以后自己一不小心手贱改了dll的名字,又找到了另一个方法。作为模块句柄,其实在dllMain函数的第一个参数就是模块句柄了,通过一个全局变量去获取,同样可以得到当前模块的句柄哦!
另外还需要注意HRSRC res = FindResource(hResInstance,MAKEINTRESOURCE(IDR_FONT_MSYH),RT_FONT);这句话,这个跟加载字体资源有一点点关系。顺便记录下加载字体过程。
添加资源->自定义...->资源类型填写Font,资源类视图中出现Font。再次添加资源,此时资源类型里面并不会出现Font,直接选择导入,文件类型选“所有文件”,选择.ttf类型的字体文件。点击确定后,会弹框询问资源类型,再次填写Font,那么文字资源就会加到Font中了。程序中IDR_FONT_MSYH就是字体的资源ID,而RT_FONT是资源类型(有看到说字体资源是标准资源来着)。
关于自定义资源获取的具体知识,可以参照 http://www.cnblogs.com/gakusei/articles/1352922.html
感谢阅读
End
void NMenu::InstallFont(){ m_resourceFont = NULL; HINSTANCE hResInstance = GetModuleHandle(_T("MenuLibrary.dll"));//AfxGetResourceHandle( ); HRSRC res = FindResource(hResInstance,MAKEINTRESOURCE(IDR_FONT_MSYH),RT_FONT);//_T("Font")); if(res) { HGLOBAL mem = LoadResource(hResInstance, res); void *data = LockResource(mem); DWORD len = SizeofResource(hResInstance, res); DWORD nFonts = 0; m_resourceFont = AddFontMemResourceEx(data,len,NULL,&nFonts); if(!m_resourceFont) AfxMessageBox(_T("字体加载失败!")); } else { AfxMessageBox(_T("字体加载失败!")); }}
需要注意的是hResInstance是指向包含资源的模块句柄。一开始开发的时候,自绘菜单类、调用菜单的对话框类和资源类在同一个项目中,所以可以用HINSTANCE hResInstance = AfxGetResourceHandle( );直接获取本程序的资源句柄,貌似用AfxGetApp()->m_hInstance也是一样的。
后来自绘菜单类封装成dll(MenuLibrary.dll)后,从另一个项目调用菜单dll,那么hResInstance读到的就是对话框的句柄,因此需要指定自绘菜单类的dll的句柄HINSTANCE hResInstance = GetModuleHandle(_T("MenuLibrary.dll"));。
当然为了防止以后自己一不小心手贱改了dll的名字,又找到了另一个方法。作为模块句柄,其实在dllMain函数的第一个参数就是模块句柄了,通过一个全局变量去获取,同样可以得到当前模块的句柄哦!
另外还需要注意HRSRC res = FindResource(hResInstance,MAKEINTRESOURCE(IDR_FONT_MSYH),RT_FONT);这句话,这个跟加载字体资源有一点点关系。顺便记录下加载字体过程。
添加资源->自定义...->资源类型填写Font,资源类视图中出现Font。再次添加资源,此时资源类型里面并不会出现Font,直接选择导入,文件类型选“所有文件”,选择.ttf类型的字体文件。点击确定后,会弹框询问资源类型,再次填写Font,那么文字资源就会加到Font中了。程序中IDR_FONT_MSYH就是字体的资源ID,而RT_FONT是资源类型(有看到说字体资源是标准资源来着)。
当然,自定义的时候,你可能填写的不是Font,而是TTF或者别的,也是可以的。那么再次添加资源的时候,资源类型就会出现新添加的“TTF”类型(“”是系统自己加上去的,应该是为了识别用户自定义吧),选择资源导入后,弹框询问资源类型时选择“TTF”,文字加载到“TTF”类型中。而此时RT_FONT需要改为_T("TTF")。
关于自定义资源获取的具体知识,可以参照 http://www.cnblogs.com/gakusei/articles/1352922.html
感谢阅读
End
0 0
- MFC笔记:从资源文件获取字体
- MFC从资源文件获取png图片
- MFC从资源释放文件
- 从字体文件中获取字体名字
- 从文件资源获取文件信息
- 从资源文件中获取版本信息
- 从资源文件获取整型数值
- 从文件资源里获取文本
- Android 从xml 文件中获取资源
- C#使用自定义字体(从文件获取)
- Servlet学习笔记—获取资源文件
- asp.net 从资源文件中获取资源内容、获取资源列表
- asp.net 从资源文件中获取资源内容、获取资源列表
- 使用资源文件中资源(从资源文件中获取文字图片等)
- MFC资源文件切换
- MFC-资源文件
- 【Java】java学习笔记:【从网络获取图像资源】实现
- 从assets获取资源
- Xcode强大的多视图立体分层显示View UI Herarchy
- STL vector的使用(一)基础
- BZOJ1207: [HNOI2004]打鼹鼠
- QT在Windows中的技术总结(四):做整套自定义程序窗口
- MFC小练手:详解自绘右键菜单(继承CMenu)
- MFC笔记:从资源文件获取字体
- MFC笔记:关于透明和渐变
- MFC笔记:TCP Socket通信
- 线段树或树状数组求逆序数(附例题)
- android OpenGL ES开发之shader
- [iOS备忘录]BLE测试传输速度[objectiv-c]
- 微软黑科技逆天 第三代小冰已会“自我进化”
- 遇到对的人很重要!
- 小谈导数、梯度和极值