CreateFont 와 CreateFontIndirect 는 둘다 폰트를 생성하는 함수입니다.
BOOL CreateFont(
int nHeight, // 폰트의 높이
int nWidth, //폰트의 가로크기
int nEscapement, // escapement 벡터각도
int nOrientation, // 기준선(보통 수평선) 에서의 각도
int fnWeight, // 폰트 가중치
DWORD fdwItalic, // 이탤릭 속성 플러그
DWORD fdwUnderline, // 밑줄 속성 플러그
DWORD fdwStrikeOut, // 중앙선 속성 플러그
DWORD fdwCharSet, // 문자열 세트 명칭
DWORD fdwOutputPrecision, // 출력 정밀도
DWORD fdwClipprecision, // 클리핑 정밀도
DWORD fdwQuality, // 출력 문자의 질
DWORD fdwPitchAndFamily, // 글꼴 피치의 종류
LPCSTR lpszFace // 폰트체의 이름
);
CreateFontIndirect 함수는 LOGFONT 구조체를 설정하여 폰트를 만듭니다.
LOGFONT 구조체는 CreateFont 안의 인자의 값을 그대로 구조체화 한것입니다.
typedef struct tagLOGFONT { //lf
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;
CreateFont 를 이용할때와 CreateFontIndirect 를 이용할 때는 차이가 있습니다.
CreateFontIndirect 를 이용할때엔 가로 크기와 세로크기를 각각 10으로
설정하였다 하더라도 그 문자의 스타일에 따라 보기 좋은 값으로 약간 변합니다.
즉, CreateFontIndirect 함수를 이용하면 글자체가 좀 보기 좋게 나타납니다.
실지로 폰트를 사용할 때는 CreateFontIndirect 를 많이 사용합니다.
폰트 대화상자에서 특정 폰트를 설정하였을때 LOGFONT가 값을 받으며,
이 값을 CreateFontIndirect 에서 바로 이용할 수 있는 장점도 있습니다.