首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 下使用 TrueType 字型顯示漢字

     編輯:關於C++

避開 FreeType 專利問題,直接呼叫系統 API 繪製 Unicode 文字

FreeType 庫解讀 TrueType hinting 代碼涉及 Apple 專利。在 Windows 平台,若已安裝對應字型,只需將多位元組字串轉為 Unicode (WideChar) 呼叫 TextOutW 即可正確繪製中文,無須自行解析字型檔。

核心程式碼

BOOL bResult = m_Font.CreateFont(-16, 0, 0, 0, 400, 0, 0, 0,
    134, 3, 2, 1, 50, "SimSun"); // GB2312 字集

char *pText = "Test漢字顯示測試Test";
wchar_t wBuffer[256];
int nLength = MultiByteToWideChar(936, MB_PRECOMPOSED, pText, -1, wBuffer, 256);
// 936 = GB2312 代碼頁

CDC *pDC = GetDC();
CFont *pFontTemp = (CFont *)pDC->SelectObject(&m_Font);
TextOutW(pDC->m_hDC, 80, 80, wBuffer, nLength - 1); // 必須用 TextOutW 而非 DC.TextOut
pDC->SelectObject(pFontTemp);
ReleaseDC(pDC);

系統需求

  • 系統需安裝 936 代碼頁 (cp_936.nls) 並註冊表設定:
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\CodePage\936 = "cp_936.nls"
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale\00000804 = "Chinese(PRC)"
  • Win95/98/NT/2000 皆支援 MultiByteToWideChar / TextOutW。
  • 程式以非 Unicode 編譯時,必須顯式呼叫 TextOutW (而非 CDC::TextOut),並傳入 HDC。

討論摘要

  • 使用 CP_ACP 或明確指定 936 均可,視系統預設代碼頁而定。
  • 字型建立時 CharSet = 134 (GB2312),OutPrecision = 3, ClipPrecision = 2, Quality = 1, PitchAndFamily = 50。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved