Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

756 lines
20 KiB

//////////////////////////////////////////////////////////////////
// File : cfont.cpp
// Purpose : Font handling class source code.
// Shared by each Applet.
// You can compile/test this file. see main() function below.
//
// Date : Thu Jul 01 12:20:34 1999
// Author : toshiak
//
// Copyright(c) 1995-1999, Microsoft Corp. All rights reserved
//////////////////////////////////////////////////////////////////
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <tchar.h>
#include "cfont.h"
#include "cutil.h"
#ifdef _TEST_CFONT
#include <stdio.h>
#endif //_TEST_CFONT
// Safe String
#define STRSAFE_NO_DEPRECATE
#include "strsafe.h"
//----------------------------------------------------------------
//structure define for internal
//----------------------------------------------------------------
#define EFI_STOPIFFOUND 0x00000001
#define EFI_DONTENUMVERT 0x00010000
typedef struct tagENUMFONTINFOA {
DWORD dwFlag;
BOOL fFound;
LOGFONTA logFontIn;
LOGFONTA logFontOut;
}ENUMFONTINFOA, *LPENUMFONTINFOA;
typedef struct tagENUMFONTINFOW {
DWORD dwFlag;
BOOL fFound;
LOGFONTW logFontIn;
LOGFONTW logFontOut;
}ENUMFONTINFOW, *LPENUMFONTINFOW;
#ifdef UNICODE
#define ENUMFONTINFO ENUMFONTINFOW
#define LPENUMFONTINFO LPENUMFONTINFOW
#else
#define ENUMFONTINFO ENUMFONTINFOA
#define LPENUMFONTINFO LPENUMFONTINFOA
#endif
#ifdef UNDER_CE // Windows CE does not support EnumFontFamiliesEx
inline int EnumFontFamiliesEx(HDC hdc, LPLOGFONT lpLogfont, FONTENUMPROC lpEnumFontFamProc,
LPARAM lParam, DWORD)
{
return ::EnumFontFamilies(hdc, lpLogfont->lfFaceName, lpEnumFontFamProc, lParam);
}
#ifndef ZeroMemory // Defined on sdk\inc\objbase.h under new source tree
#define ZeroMemory(dest, len) memset((dest),0,(len))
#endif
#define DEFAULT_GUI_FONT SYSTEM_FONT
#endif // UNDER_CE
//----------------------------------------------------------------
//
// Public Method.
//
//----------------------------------------------------------------
//////////////////////////////////////////////////////////////////
// Function : CFont::CreateDefGUIFont
// Type : HFONT
// Purpose : Create(Copy) DEFAULT_GUI_FONT font Handle.
// Args : None
// Return :
// DATE : Wed Jun 30 18:33:15 1999
// Histroy :
//////////////////////////////////////////////////////////////////
HFONT
CFont::CreateDefGUIFont(VOID)
{
HFONT hFont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
if(!hFont) {
return NULL;
}
#ifdef AWBOTH
if(CUtil::IsWinNT()) {
LOGFONTW lf;
if(!::GetObjectW(hFont, sizeof(lf), &lf)) {
return NULL;
}
return ::CreateFontIndirectW(&lf);
}
#endif
LOGFONT lf;
if(!::GetObject(hFont, sizeof(lf), &lf)) {
return NULL;
}
return ::CreateFontIndirect(&lf);
}
INT PointSize2LogPixel(INT pointSize)
{
HWND hwnd = NULL;
HDC hDC = ::GetDC(hwnd);
INT dpi = ::GetDeviceCaps(hDC, LOGPIXELSY);
::ReleaseDC(hwnd, hDC);
return (pointSize * dpi)/72;
}
//////////////////////////////////////////////////////////////////
// Function : CFont::CreateGUIFontByCharSet
// Type : HFONT
// Purpose : Create GUI Font handle with specified characterset.
// Font size is same with DEFAULT_GUI_FONT.
// Args :
// : LPTSTR lpstrFontFace; fontface string to search,
// if this NULL, return first found
// charset HFONT.
// : INT charSet
// : INT poinstSize Inclues VerticalFont or NOT (default is FALSE)
// Return :
// DATE : Wed Jun 30 18:37:54 1999
// Histroy :
//////////////////////////////////////////////////////////////////
HFONT
CFont::CreateGUIFontByNameCharSet(LPTSTR lpstrFontFace,
INT charSet,
INT pointSize)
{
LOGFONT lf, lfDef;
//Get DEFAULT_GUI_FONT's LOGFONT data.
if(!CFont::GetDefGUILogFont(&lfDef)) {
return NULL;
}
//Search Specified charset font's LOGFONT data.
if(!CFont::SearchLogFontByNameCharSet(&lf, lpstrFontFace, charSet, FALSE)) {
return NULL;
}
lfDef.lfCharSet = lf.lfCharSet;
if(pointSize > 0) {
lfDef.lfHeight = - PointSize2LogPixel(pointSize);
}
_tcscpy(lfDef.lfFaceName, lf.lfFaceName);
return ::CreateFontIndirect(&lfDef);
}
#ifdef AWBOTH
HFONT
CFont::CreateGUIFontByNameCharSetW(LPWSTR lpstrFontFace,
INT charSet,
INT pointSize)
{
LOGFONTW lf, lfDef;
//Get DEFAULT_GUI_FONT's LOGFONT data.
if(!CFont::GetDefGUILogFontW(&lfDef)) {
return NULL;
}
//Search Specified charset font's LOGFONT data.
if(!CFont::SearchLogFontByNameCharSetW(&lf, lpstrFontFace, charSet, FALSE)) {
return NULL;
}
lfDef.lfCharSet = lf.lfCharSet;
if(pointSize > 0) {
lfDef.lfHeight = - PointSize2LogPixel(pointSize);
}
lfDef.lfWidth = 0;
wcscpy(lfDef.lfFaceName, lf.lfFaceName);
return ::CreateFontIndirectW(&lfDef);
}
#endif //AWBOTH
//////////////////////////////////////////////////////////////////
// Function : CFont::IsFontExist
// Type : BOOL
// Purpose : Check specified FaceName & charSet font is Exit or NOT.
// Args :
// : LPTSTR lpstrFontFace
// : INT charSet
// Return :
// DATE : Thu Jul 22 23:00:54 1999
// Histroy :
//////////////////////////////////////////////////////////////////
BOOL
CFont::IsFontExist(LPTSTR lpstrFontFace, INT charSet)
{
return CFont::SearchLogFontByNameCharSet(NULL,
lpstrFontFace,
charSet,
FALSE);
}
#ifdef AWBOTH
BOOL
CFont::IsFontExist(LPWSTR lpstrFontFace, INT charSet)
{
return CFont::SearchLogFontByNameCharSetW(NULL,
lpstrFontFace,
charSet,
FALSE);
}
#endif //AWBOTH
//////////////////////////////////////////////////////////////////
// Function : CFont::GetFontNameByCharSet
// Type : BOOL
// Purpose : Serach & Get FontFace with Specified charSet
// Args :
// : INT charSet
// : LPTSTR lpstrFontFace
// : INT cchMax
// Return :
// DATE : Thu Jul 22 23:13:01 1999
// Histroy :
//////////////////////////////////////////////////////////////////
BOOL
CFont::GetFontNameByCharSet(INT charSet,
LPTSTR lpstrFontFace,
INT cchMax)
{
if(!lpstrFontFace) {
return FALSE;
}
if(cchMax < LF_FACESIZE) {
return FALSE;
}
LOGFONT lf;
BOOL fRet = CFont::SearchLogFontByNameCharSet(&lf,
NULL,
charSet,
FALSE);
if(fRet) {
StringCchCopy(lpstrFontFace, cchMax, lf.lfFaceName);
}
return fRet;
}
#ifdef AWBOTH
BOOL
CFont::GetFontNameByCharSetW(INT charSet,
LPWSTR lpstrFontFace,
INT cchMax)
{
if(!lpstrFontFace) {
return FALSE;
}
if(cchMax < LF_FACESIZE) {
return FALSE;
}
LOGFONTW lf;
BOOL fRet = CFont::SearchLogFontByNameCharSetW(&lf,
NULL,
charSet,
FALSE);
if(fRet) {
wcscpy(lpstrFontFace, lf.lfFaceName);
}
return fRet;
}
#endif
//////////////////////////////////////////////////////////////////
// Function : CFont::GetFontInfoByName
// Type : BOOL
// Purpose :
// Args :
// : LPTSTR lpstrFontFace
// : INT * pCharSet
// : INT * pCodePage
// Return :
// DATE : Fri Jul 23 02:48:29 1999
// Histroy :
//////////////////////////////////////////////////////////////////
BOOL
CFont::GetFontInfoByName(LPTSTR lpstrFontFace,
INT *pCharSet,
INT *pCodePage)
{
LOGFONT lf;
BOOL fRet = CFont::SearchLogFontByNameCharSet(&lf,
lpstrFontFace,
DEFAULT_CHARSET,
FALSE);
if(!fRet) {
return FALSE;
}
*pCharSet = (INT)lf.lfCharSet;
CHARSETINFO info;
if(::TranslateCharsetInfo((DWORD *)(DWORD_PTR)*pCharSet,
&info,
TCI_SRCCHARSET)) {
*pCodePage = (INT)info.ciACP;
}
else { //failed
*pCodePage = CP_ACP;
}
return 0;
}
#ifdef AWBOTH
BOOL
CFont::GetFontInfoByNameW(LPWSTR lpstrFontFace,
INT *pCharSet,
INT *pCodePage)
{
LOGFONTW lf;
BOOL fRet = CFont::SearchLogFontByNameCharSetW(&lf,
lpstrFontFace,
DEFAULT_CHARSET,
FALSE);
if(!fRet) {
return FALSE;
}
*pCharSet = (INT)lf.lfCharSet;
CHARSETINFO info;
if(::TranslateCharsetInfo((DWORD *)(DWORD_PTR)*pCharSet,
&info,
TCI_SRCCHARSET)) {
*pCodePage = (INT)info.ciACP;
}
else { //failed
*pCodePage = CP_ACP;
}
return 0;
}
#endif //AWBOTH
//----------------------------------------------------------------
//
// Private method.
//
//----------------------------------------------------------------
//////////////////////////////////////////////////////////////////
// Function : CFont::GetDefGUILogFont
// Type : BOOL
// Purpose :
// Args : LOGFONT *lpLF
// Return :
// DATE : Wed Jul 15 19:36:57 1998
// Histroy :
//////////////////////////////////////////////////////////////////
BOOL
CFont::GetDefGUILogFont(LOGFONT *lpLF)
{
if(!lpLF) {
return FALSE;
}
if(!::GetObject((HFONT)::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), lpLF)) {
return FALSE;
}
return TRUE;
}
////////////////////
//Unicode version.
////////////////////
#ifdef AWBOTH
BOOL
CFont::GetDefGUILogFontW(LOGFONTW *lpLF)
{
if(!lpLF) {
return FALSE;
}
if(!::GetObjectW((HFONT)::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONTW), lpLF)) {
return FALSE;
}
return TRUE;
}
#endif //AWBOTH
//////////////////////////////////////////////////////////////////
// Function : CFont::SearchLogFontByNameCharSet
// Type : BOOL
// Purpose : Search LOGFONT data with specified FaceName & charset.
// If FaceName is not specified, return first find charset logfont.
// Args :
// : LOGFONT * lpLF
// : LPTSTR lpstrFontFace
// : INT charSet
// : BOOL fIncVert
// Inclues VerticalFont or NOT (default is FALSE)
// Return :
// DATE : Thu Jul 01 17:12:40 1999
// Histroy :
//////////////////////////////////////////////////////////////////
BOOL
CFont::SearchLogFontByNameCharSet(LOGFONT *lpLF,
LPTSTR lpstrFontFace,
INT charSet,
BOOL fIncVert)
{
HWND hwndDC = NULL;
HDC hDC = ::GetDC(hwndDC);
if(!hDC) {
return FALSE;
}
ENUMFONTINFO enumFontInfo;
LPENUMFONTINFO lpEnumFontInfo = &enumFontInfo;
::ZeroMemory(&enumFontInfo, sizeof(enumFontInfo));
lpEnumFontInfo->logFontIn.lfCharSet = (BYTE)charSet;
if(lpstrFontFace) {
if(lstrlen(lpstrFontFace) < LF_FACESIZE) {
_tcscpy(lpEnumFontInfo->logFontIn.lfFaceName, lpstrFontFace);
}
}
lpEnumFontInfo->dwFlag = EFI_STOPIFFOUND;
lpEnumFontInfo->dwFlag |= fIncVert ? 0 : EFI_DONTENUMVERT;
lpEnumFontInfo->fFound = FALSE;
::EnumFontFamiliesEx(hDC,
&lpEnumFontInfo->logFontIn,
(FONTENUMPROC)CFont::EnumFontFamiliesExProc,
(LPARAM)lpEnumFontInfo,
0);
::ReleaseDC(hwndDC, hDC);
if(lpEnumFontInfo->fFound) {
if(lpLF) {
*lpLF = lpEnumFontInfo->logFontOut;
}
}
return lpEnumFontInfo->fFound;
}
#ifdef AWBOTH
BOOL
CFont::SearchLogFontByNameCharSetW(LOGFONTW *lpLF,
LPWSTR lpstrFontFace,
INT charSet,
BOOL fIncVert)
{
HWND hwndDC = NULL;
HDC hDC = ::GetDC(hwndDC);
if(!hDC) {
return FALSE;
}
ENUMFONTINFOW enumFontInfo;
LPENUMFONTINFOW lpEnumFontInfo = &enumFontInfo;
::ZeroMemory(&enumFontInfo, sizeof(enumFontInfo));
lpEnumFontInfo->logFontIn.lfCharSet = (BYTE)charSet;
if(lpstrFontFace) {
if(wcslen(lpstrFontFace) < LF_FACESIZE) {
wcscpy(lpEnumFontInfo->logFontIn.lfFaceName, lpstrFontFace);
}
}
lpEnumFontInfo->dwFlag = EFI_STOPIFFOUND;
lpEnumFontInfo->dwFlag |= fIncVert ? 0 : EFI_DONTENUMVERT;
lpEnumFontInfo->fFound = FALSE;
::EnumFontFamiliesExW(hDC,
&lpEnumFontInfo->logFontIn,
(FONTENUMPROCW)CFont::EnumFontFamiliesExProcW,
(LPARAM)lpEnumFontInfo,
0);
::ReleaseDC(hwndDC, hDC);
if(lpEnumFontInfo->fFound) {
if(lpLF) {
*lpLF = lpEnumFontInfo->logFontOut;
}
}
return lpEnumFontInfo->fFound;
}
#endif
//////////////////////////////////////////////////////////////////
// Function : CFont::EnumFontFamiliesExProc
// Type : INT CALLBACK
// Purpose :
// Args :
// : ENUMLOGFONTEX * lpElf
// : NEWTEXTMETRIC * lpNtm
// : INT iFontType
// : LPARAM lParam
// Return :
// DATE : Thu Jul 01 15:17:56 1999
// Histroy :
//////////////////////////////////////////////////////////////////
INT CALLBACK
CFont::EnumFontFamiliesExProc(ENUMLOGFONTEX *lpElf,
NEWTEXTMETRIC *lpNtm,
INT iFontType,
LPARAM lParam)
{
LPENUMFONTINFO lpEnumFontInfo = (LPENUMFONTINFO)lParam;
if(!lpEnumFontInfo) {
return 0; //Do not continue;
}
if(lpEnumFontInfo->dwFlag & EFI_STOPIFFOUND) {
if(lpEnumFontInfo->logFontIn.lfFaceName[0] == (TCHAR)0x00) {
if(lpEnumFontInfo->logFontIn.lfCharSet == lpElf->elfLogFont.lfCharSet) {
//----------------------------------------------------------------
//if EFI_DONTENUMVERT is set,
//Do skip vertical font enumulation.
//----------------------------------------------------------------
if( (lpEnumFontInfo->dwFlag & EFI_DONTENUMVERT) &&
lpElf->elfLogFont.lfFaceName[0] == (TCHAR)'@') {
return 1; //continue to enum.
}
//Found specified charSet's logfont
lpEnumFontInfo->logFontOut = lpElf->elfLogFont;
lpEnumFontInfo->fFound = TRUE;
return 0; //Do not coninue;
}
}
else {
if(lpEnumFontInfo->logFontIn.lfCharSet == lpElf->elfLogFont.lfCharSet &&
0 == _tcscmp(lpEnumFontInfo->logFontIn.lfFaceName, lpElf->elfLogFont.lfFaceName)) {
//Found specified charSet's logfont
lpEnumFontInfo->logFontOut = lpElf->elfLogFont;
lpEnumFontInfo->fFound = TRUE;
return 0; //Do not coninue;
}
}
}
else {
#ifdef _TEST_CFONT
extern LPTSTR GetCharset(int );
_tprintf(TEXT("[%-24s] [%-20s][%s][%s][%s]\n"),
lpElf->elfLogFont.lfFaceName,
GetCharset(lpElf->elfLogFont.lfCharSet),
lpElf->elfFullName,
lpElf->elfScript,
lpElf->elfStyle);
#endif
}
return 1;//continue to enum;
UNREFERENCED_PARAMETER(lpNtm);
UNREFERENCED_PARAMETER(iFontType);
}
#ifdef AWBOTH
INT CALLBACK
CFont::EnumFontFamiliesExProcW(ENUMLOGFONTEXW *lpElf,
NEWTEXTMETRIC *lpNtm,
INT iFontType,
LPARAM lParam)
{
LPENUMFONTINFOW lpEnumFontInfo = (LPENUMFONTINFOW)lParam;
if(!lpEnumFontInfo) {
return 0; //Do not continue;
}
if(lpEnumFontInfo->dwFlag & EFI_STOPIFFOUND) {
if(lpEnumFontInfo->logFontIn.lfFaceName[0] == (WCHAR)0x00) {
if(lpEnumFontInfo->logFontIn.lfCharSet == lpElf->elfLogFont.lfCharSet) {
//----------------------------------------------------------------
//if EFI_DONTENUMVERT is set,
//Do skip vertical font enumulation.
//----------------------------------------------------------------
if( (lpEnumFontInfo->dwFlag & EFI_DONTENUMVERT) &&
lpElf->elfLogFont.lfFaceName[0] == (WCHAR)'@') {
return 1; //continue to enum.
}
//Found specified charSet's logfont
lpEnumFontInfo->logFontOut = lpElf->elfLogFont;
lpEnumFontInfo->fFound = TRUE;
return 0; //Do not coninue;
}
}
else {
if(lpEnumFontInfo->logFontIn.lfCharSet == lpElf->elfLogFont.lfCharSet &&
0 == wcscmp(lpEnumFontInfo->logFontIn.lfFaceName, lpElf->elfLogFont.lfFaceName)) {
//Found specified charSet's logfont
lpEnumFontInfo->logFontOut = lpElf->elfLogFont;
lpEnumFontInfo->fFound = TRUE;
return 0; //Do not coninue;
}
}
}
return 1;//continue to enum;
UNREFERENCED_PARAMETER(lpNtm);
UNREFERENCED_PARAMETER(iFontType);
}
#endif //AWBOTH
//----------------------------------------------------------------
//
// test program for cfontex.cpp
//
// how to compile.
// 1. for ANSI.
// cl cfontex.cpp -I../common -D_TEST_CFONT -link user32.lib advapi32.lib gdi32.lib
// 2. for Ansi&Wide both
// cl cfontex.cpp -I../common -DAWBOTH -D_TEST_CFONT -link user32.lib advapi32.lib gdi32.lib
// 2. for Unicode.
// cl cfontex.cpp -I../common -DUNICODE -D_UNICODE -D_TEST_CFONT -link user32.lib advapi32.lib gdi32.lib
//----------------------------------------------------------------
#ifdef _TEST_CFONT
#if defined(UNICODE) || defined(_UNICODE)
#define DEFSTR(a) {a, L ## #a}
#else
#define DEFSTR(a) {a, #a}
#endif
typedef struct tagIDSTR {
INT id;
TCHAR *p;
}IDSTR;
IDSTR idstr[]= {
DEFSTR(ANSI_CHARSET),
DEFSTR(DEFAULT_CHARSET),
DEFSTR(SYMBOL_CHARSET),
DEFSTR(SHIFTJIS_CHARSET),
DEFSTR(HANGEUL_CHARSET),
DEFSTR(HANGUL_CHARSET),
DEFSTR(GB2312_CHARSET),
DEFSTR(CHINESEBIG5_CHARSET),
DEFSTR(OEM_CHARSET),
DEFSTR(JOHAB_CHARSET),
DEFSTR(HEBREW_CHARSET),
DEFSTR(ARABIC_CHARSET),
DEFSTR(GREEK_CHARSET),
DEFSTR(TURKISH_CHARSET),
DEFSTR(VIETNAMESE_CHARSET),
DEFSTR(THAI_CHARSET),
DEFSTR(EASTEUROPE_CHARSET),
DEFSTR(RUSSIAN_CHARSET),
DEFSTR(MAC_CHARSET),
DEFSTR(BALTIC_CHARSET),
};
#define ArrayCount(a) sizeof(a)/sizeof(a[0])
LPTSTR GetCharset(INT charset)
{
static TCHAR szbuf[256];
int i;
for( i = 0; i < ArrayCount(idstr); i++) {
if(charset == idstr[i].id) {
return idstr[i].p;
}
}
wsprintf(szbuf, TEXT("Unknown Charset[0x%08x]"), charset);
return szbuf;
}
VOID PrintLogFont(LOGFONT *lplf)
{
_tprintf(TEXT("lfHeight [%d]\n"), lplf->lfHeight);
_tprintf(TEXT("lfWidth [%d]\n"), lplf->lfWidth );
_tprintf(TEXT("lfEscapement [%d]\n"), lplf->lfEscapement);
_tprintf(TEXT("lfOrientation [%d]\n"), lplf->lfOrientation);
_tprintf(TEXT("lfWeight [%d]\n"), lplf->lfWeight);
_tprintf(TEXT("lfItalic [%d]\n"), lplf->lfItalic);
_tprintf(TEXT("lfUnderline [%d]\n"), lplf->lfUnderline);
_tprintf(TEXT("lfStrikeOut [%d]\n"), lplf->lfStrikeOut);
_tprintf(TEXT("lfCharSet [%d]\n"), lplf->lfCharSet);
_tprintf(TEXT("lfOutPrecision [%d]\n"), lplf->lfOutPrecision);
_tprintf(TEXT("lfClipPrecision [%d]\n"), lplf->lfClipPrecision);
_tprintf(TEXT("lfQuality [%d]\n"), lplf->lfQuality);
_tprintf(TEXT("lfPitchAndFamily[%d]\n"), lplf->lfPitchAndFamily);
_tprintf(TEXT("lfFaceName [%s]\n"), lplf->lfFaceName);
}
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <mbstring.h>
#include <mbctype.h>
#include <locale.h>
#include "cfont.h"
#include "cutil.h"
#include "cutil.cpp"
extern LPTSTR GetCharset(INT charset);
void main(void)
{
_tsetlocale(LC_ALL, TEXT(".ACP"));
HWND hwndDC = NULL;
HDC hDC = ::GetDC(hwndDC);
ENUMFONTINFO enumFontInfo;
LPENUMFONTINFO lpEnumFontInfo = &enumFontInfo;
#if 0
::ZeroMemory(&enumFontInfo, sizeof(enumFontInfo));
lpEnumFontInfo->logFontIn.lfCharSet = (BYTE)DEFAULT_CHARSET;
lpEnumFontInfo->dwFlag = 0;
_tprintf(TEXT("Enumlate All Font\n"));
::EnumFontFamiliesEx(hDC,
&lpEnumFontInfo->logFontIn,
(FONTENUMPROC)CFont::EnumFontFamiliesExProc,
(LPARAM)lpEnumFontInfo,
0);
::ZeroMemory(&enumFontInfo, sizeof(enumFontInfo));
lpEnumFontInfo->logFontIn.lfCharSet = ANSI_CHARSET;
lpEnumFontInfo->dwFlag = 0;
_tprintf(TEXT("Enumulate ANSI_CHARSET font\n"));
::EnumFontFamiliesEx(hDC,
&lpEnumFontInfo->logFontIn,
(FONTENUMPROC)CFont::EnumFontFamiliesExProc,
(LPARAM)lpEnumFontInfo,
0);
_tprintf(TEXT("Enumulate SHIFTJIS_CHARSET font\n"));
::ZeroMemory(&enumFontInfo, sizeof(enumFontInfo));
lpEnumFontInfo->logFontIn.lfCharSet = SHIFTJIS_CHARSET;
lpEnumFontInfo->dwFlag = 0;
::EnumFontFamiliesEx(hDC,
&lpEnumFontInfo->logFontIn,
(FONTENUMPROC)CFont::EnumFontFamiliesExProc,
(LPARAM)lpEnumFontInfo,
0);
::ReleaseDC(hwndDC, hDC);
#endif
LOGFONT lf;
BOOL fRet;
static LPTSTR fontNameList[]= { TEXT("MS Mincho"),
TEXT("MS Gothic"),
TEXT("MS UI Gothic"),
TEXT("MS 明朝"),
TEXT("MS P明朝"),
TEXT("MS ゴシック"),
TEXT("MS Pゴシック")};
CFont::GetDefGUILogFont(&lf);
_tprintf(TEXT("DEFAULT_GUI_FONT LOGFONT\n"));
PrintLogFont(&lf);
int i;
for(i = 0; i < sizeof(fontNameList)/sizeof(fontNameList[0]); i++) {
fRet = CFont::SearchLogFontByNameCharSet(&lf,
fontNameList[i],
SHIFTJIS_CHARSET);
_tprintf(TEXT("Search Font [%-20s] %s\n"),
fontNameList[i],
fRet ? TEXT("FOUND") : TEXT("NOT FOUND"));
if(fRet) {
PrintLogFont(&lf);
HFONT hFont = CFont::CreateGUIFontByNameCharSet(fontNameList[i],
SHIFTJIS_CHARSET, FALSE);
LOGFONT lfNew;
::GetObject(hFont, sizeof(lfNew), &lfNew);
PrintLogFont(&lfNew);
}
}
}
#endif //_TEST_CFONT