用TRUETYPE技术显示汉字

何大初

何大初

2016-02-19 15:30

今天图老师小编要向大家分享个用TRUETYPE技术显示汉字教程,过程简单易学,相信聪明的你一定能轻松get!

  我知道有一个FREETYPE库可以把TRUETYPE字库渲染成点阵字。但是请注意TRUETYPE技术中包含了多项Apple公司的技术专利(主要是解释其HINT码),目前FREETYPE项目负责人已经收到Apple公司的通知,要求其申请Apple的专利许可,目前正在谈判之中。

  想要避开专利问题,只好不用HINT,但是这样一来显示效果极差。

  其实如果只是在Windows下(不管中文还是E文),只要先把中文转换成UNICODE串(MultiByteToWideChar?),再用TextOutW函数输出即可。

  不管是95还是NT都支持这些函数,只要已经装有相应的字体即可。没有必要去自己解释TRUETYPE。

  灰衣老僧: 是吗?专利问题有公司考虑! 

  问题是转换为Unicode在英文下输出我没成功! 

  以前是高手: 怎么能用CP_OEMCP呢? 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  当然要填936了。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  要显式地使用TextOutW(),不能用dc.TextOut(),因为程序还是按非UNICODE方式编译的。

  wchar_t wstr[500];

  int n=MultiByteToWideChar(936, MB_PRECOMPOSED,

  str, -1, wstr, 500);

  TextOutW(pDC-m_hDC, x, y, wstr);

  系统必须装有936代码页。怎么装?把cp_936.nls(VC++中有的)COPY到windowssystem下,再在注册表的

  HKEY_LOCAL_MACHINESystemCurrentControlSetcontrolNlsCodepage中,加上936 = "cp_936.nls"

  HKEY_LOCAL_MACHINE_SystemCurrentControlSetcontrolNlsLocale中,加上00000804 = "Chinese(PRC)"

  灰衣老僧: 太棒了!成功了!等你回国,老僧一定请你喝酒!

  Code:

  

BOOL bResult = m_Font.CreateFont(-16,0,0,0,400,0,0,0,134,3,2,1,50,"SimSun");
  char *pText = "Test汉字显示测试Test";
  wchar_t wBuffer[256];
  int nLength = MultiByteToWideChar(936, MB_PRECOMPOSED, pText, -1, wBuffer, 256);
  CDC *pDC = GetDC();
  CFont *pFontTemp = (CFont *)pDC-SelectObject(&m_Font);
  TextOutW(pDC-m_hDC, 80, 80, wBuffer, nLength - 1);
  pDC-SelectObject(pFontTemp);
   ReleaseDC(pDC);

展开更多 50%)
分享

猜你喜欢

用TRUETYPE技术显示汉字

编程语言 网络编程
用TRUETYPE技术显示汉字

TC 中的汉字技术

编程语言 网络编程
TC 中的汉字技术

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

oracle中解决汉字无法显示、输入问题

SQLServer
oracle中解决汉字无法显示、输入问题

在PHP的图形函数中显示汉字

Web开发
在PHP的图形函数中显示汉字

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

影响Oracle汉字显示的字符集问题

编程语言 网络编程
影响Oracle汉字显示的字符集问题

用PHP编程读取汉字点阵数据

PHP
用PHP编程读取汉字点阵数据

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

节选:快速进入AJAX开发

节选:快速进入AJAX开发

介绍MySQL用户root密码为空的另类攻击方法

介绍MySQL用户root密码为空的另类攻击方法
下拉加载更多内容 ↓