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

在同一系统中显示GB字符和BIG5字符,第1张

在同一系统中显示GB字符和BIG5字符,第2张

目前mainland China和港台采用不同的内码,所以有两种通用的内码GB/BIG5。以前所有软件都是用内置字体显示两个内码。这里我提供一个简单的方法,在Windows程序中显示不同内码的字符。

大家可能都注意到了,IE、MS Office97等软件在没有平台支持的情况下,可以根据不同的内码以不同的字体显示。都是使用MS提供的语言开发包进行开发,这种方法描述如下:

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

然后你需要修改你的显示代码,为不同的模式加载不同的字体。这项技术的核心是指定不同的字符集和字体名称。型号代码如下:

//下面的代码将加载BIG5字体并显示
CFont字体;
log font lf;//LOGFONT结构中的变量用于定义字体的各种特性
memset(&lf,0,sizeof(lf));
lf . lf CHARSET = Chinese big 5 _ CHARSET;//设置字符集
lf . lf height = 20;
strcpy(lf.lfFaceName,"刘明");//将字体名称刘明设置为MS
font提供的BIG5字体。创建字体间接(& lf);//Create font
cfont * pf =(cfont *)DC . select object(& font);//保存当前字体
dc.textout (0,0,_ t("想要显示的"));
dc。select object(pF);//恢复以前的字体

但是我们并不知道系统中安装的字体,所以要弄清楚我们需要的字体是否已经安装。Windows中的EnumFontFamiliesEx可以帮助我们。该功能的描述如下:

int EnumFontFamiliesEx(HDC hdc,LPLOGFONT lpLogfont,
font enum proc lpEnumFontFamExProc,
LPARAM lParam,DWORD dw flags);
调用该函数时,需要在lpLogfont中设置相应的值。以下代码表明所有BIG5字体都已列出。
HWND hW =::get focus();
HDC HDC =::GetDC(hW);
log font lf;
memset(&lf,0,sizeof(lf));
lf . lf CHARSET = Chinese big 5 _ CHARSET;//如果值为DEFAULT_CHARSET,则列出所有字体
lf . lf facename = " ";
lf . lfpitchandfamily = 0;
EmunFontFamiliesEx(hdc,&lf,myEnumFontFamExProc,0,0);
同时需要定义一个回调函数,每次找到一个字体都会调用这个函数。函数的原型如下:
int callback myenumfontnamexproc(enumlogfontex * lpelf,newtextmetriex * lpntme,intfont type,lparam lparam)[/br]{
trace(" font family name \ n ",lpelf--> elfllogfont . lf .
//将字体logfont或FaceName保存在自己的数据中
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在同一系统中显示GB字符和BIG5字符

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情