轉(zhuǎn)帖|其它|編輯:郝浩|2010-11-16 13:41:50.000|閱讀 455 次
概述:當(dāng)前由于大陸和港臺采用不同的內(nèi)碼,因此產(chǎn)生了兩種常用的內(nèi)碼GB/BIG5。以前的軟件都是利用內(nèi)建的字庫來完成兩種內(nèi)碼的顯示,而在這里我提供一種簡便的方法用于在Windows程序中顯示不同內(nèi)碼的文字。大家可能都注意到IE,MS Office97等軟件都可以根據(jù)不同內(nèi)碼使用不同的字體顯示而不需要平臺支持。他們利用的都是MS所提供的語言開發(fā)包進(jìn)行開發(fā),下面介紹這種方法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
當(dāng)前由于大陸和港臺采用不同的內(nèi)碼,因此產(chǎn)生了兩種常用的內(nèi)碼GB/BIG5。以前的軟件都是利用內(nèi)建的字庫來完成兩種內(nèi)碼的顯示,而在這里我提供一種簡便的方法用于在Windows程序中顯示不同內(nèi)碼的文字。
大家可能都注意到IE,MS Office97等軟件都可以根據(jù)不同內(nèi)碼使用不同的字體顯示而不需要平臺支持。他們利用的都是MS所提供的語言開發(fā)包進(jìn)行開發(fā),下面介紹這種方法:
首先你需要安裝MS提供的GB和BIG5字體。
然后需要修改你的顯示代碼,對于不同的模式裝入不同的字體。這種技術(shù)的核心就是指定不同的字符集和字體名稱,示范代碼如下:
//下面的代碼將裝入BIG5字體并顯示
CFont font;
LOGFONT lf; //LOGFONT結(jié)構(gòu)中的變量用于定義字體的各種特性
memset(&lf,0,sizeof(lf));
lf.lfCharSet = CHINESEBIG5_CHARSET; //設(shè)置字符集
lf.lfHeight = 20;
strcpy(lf.lfFaceName,"MingLiu"); //設(shè)置字體名稱 MingLiu為MS提供的BIG5字體
font.CreateFontIndirect(&lf); //創(chuàng)建字體
CFont* pF = (CFont*)dc.SelectObject(&font); //保存當(dāng)前字體
dc.TextOut(0,0,_T("what you want to display"));
dc.SelectObject(pF); //恢復(fù)以前的字體
但是系統(tǒng)中安裝的字體我們是不知道的,因此我們應(yīng)該找出我們所需要的字體是否已經(jīng)安裝。Windows中的EnumFontFamiliesEx可以幫助我們。該函數(shù)的說明如下:
int EnumFontFamiliesEx(HDC hdc,LPLOGFONT lpLogfont,
FONTENUMPROC lpEnumFontFamExProc,
LPARAM lParam,DWORD dwFlags);
在調(diào)用該功能時需要在lpLogfont中設(shè)置相應(yīng)的值,下面的代碼表示列出所有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);
同時你還需要定義一個回調(diào)函數(shù),在每找到一種字體時該函數(shù)都將被調(diào)用。函數(shù)原型如下:
int CALLBACK myEnumFontFamExProc(ENUMLOGFONTEX *lpelfe,NEWTEXTMETRICEX *lpntme, int FontType,LPARAM lParam)
{
TRACE("font family name\n",lpelfe->elfLogFont.lfFaceName);
//將該字體LOGFONT或是FaceName保存到自己的數(shù)據(jù)中
}
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載