• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

在同一系统中显示GB字符和BIG5字符

c++ 搞代码 3年前 (2018-08-07) 188次浏览 已收录 0个评论

  当前由于大陆和港台采用不同的内码,因此产生了两种常用的内码GB/BIG5。以前的软件都是利用内建的字库来完成两种内码的显示,而在这里我提供一种简便的方法用于在Windows程序中显示不同内码的文字。

  大家可能都注意到IE,MS Office97等软件都可以根据不同内码使用不同的字体显示而不需要平台支持。他们利用的都是MS所提供的语言开发包进行开发,下面介绍这种方法:

  首先你需要安装MS提供的GB和BIG5字体,(可在MS站点免费下载)。

  然后需要修改你的显示代码,对于不同的模式装入不同的字体。这种技术的核心就是指定不同的字符集和字体名称,示范代码如下:

//下面的代码将装入BIG5字体并显示

http://www.gaodaima.com/?p=65374在同一系统中显示GB字符和BIG5字符

CFont font;
LOGFONT lf; //LOGFONT结构中的变量用于定义字体的各种特性
memset(&lf,0,sizeof(lf));
lf.lfCharSet = CHINESEBIG5_CHARSET; //设置字符集
lf.lfHeight = 20;
strcpy(lf.lfFaceName,"MingLiu"); //设置字体名称 MingLiu为MS提供的BIG5字体
font.CreateFontIndirect(&lf); //创建字体
CFont* pF = (CFont*)dc.SelectObject(&font); //保存当前字体
dc.TextOut(0,0,_T("what you want to display"));
dc.SelectObject(pF); //恢复以前的字体

但是系统中安装的字体我们是不知道的,因此我们应该找出我们所需要的字体是否已经安装。Windows中的EnumFontFamiliesEx可以帮助我们。该函数的说明如下:

int EnumFontFamiliesEx(HDC hdc,LPLOGFONT lpLogfont,
FONTENUMPROC lpEnumFontFamExProc,
LPARAM lParam,DWORD dwFlags);
在调用该功能时需要在lpLogfont中设置相应的值,下面的代码表示列出所有BIG5字体。
HWND hW=::GetFocus();
HDC hdc=::GetDC(hW);
LOGFONT lf;
memset(&lf,0,sizeof(lf));
lf.lfCharset = CHINESEBIG5_CHARSET; //如果该值为DEFAULT_CHARSET将会列出所有字体
lf.lfFaceName = "";
lf.lfPitchAndFamily = 0;
EmunFontFamiliesEx(hdc,&lf,myEnumFontFamExProc,0,0);
同时你还需要定义一个回调函数,在每找到一种字体时该函数都将被调用。函数原型如下:
int CALLBACK myEnumFontFamExProc(ENUMLOGFONTEX *lpelfe,NEWTEXTMETRICEX *lpntme, int FontType,LPARAM lParam)
{
TRACE("font family name/n",lpelfe->elfLogFont.lfFaceName);
//将该字体LOGFONT或是FaceName保存到自己的数据中
}

欢迎大家阅读《在同一系统中显示GB字符和BIG5字符》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:在同一系统中显示GB字符和BIG5字符
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址