彩票走势图

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

转帖|其它|编辑:郝浩|2010-11-16 13:41:50.000|阅读 455 次

概述:当前由于大陆和港台采用不同的内码,因此产生了两种常用的内码GB/BIG5。以前的软件都是利用内建的字库来完成两种内码的显示,而在这里我提供一种简便的方法用于在Windows程序中显示不同内码的文字。大家可能都注意到IE,MS Office97等软件都可以根据不同内码使用不同的字体显示而不需要平台支持。他们利用的都是MS所提供的语言开发包进行开发,下面介绍这种方法。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

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

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

  首先你需要安装MS提供的GB和BIG5字体。

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

  //下面的代码将装入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保存到自己的数据中

  }


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP