Windows GDI에서 LOGFONT 구조체를 볼 때, 그리고 글꼴 이름을 이야기 할 때 종종 헷갈리는 부분이 Facename 과 Fontname 이다. 결론부터 말하면, > LOGFONT에는 facename만 있고, fontname이라는 필드는 없다. > 흔히 말하는 font name은 대부분 lfFaceName을 의미한다. {{{+1 LOGFONT의 실제 필드 }}} {{{#!gcode typedef struct tagLOGFONT { 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; }}} {{{+1 Face Name (lfFaceName) }}} 정의: * GDI에서 폰트를 식별하기 위한 “서체 패밀리 이름” * 사용자가 보통 인식하는 글꼴 이름 예시: {{{#!gcode lf.lfFaceName = TEXT("Malgun Gothic"); lf.lfFaceName = TEXT("Arial"); lf.lfFaceName = TEXT("Times New Roman"); }}} Font Name 이라는 용어는 어디서 나오나? 1. 일반적인 용어(비공식)로 UI, 문서, 개발자 대화에서 "font name" ≒ face name 으로 등장한다. 2. TrueType / OpenType 내부 이름 (완전히 다른 개념) 폰트 파일 내부에는 여러 이름이 있다. {{{ | 이름 | 설명 | | --------------- | ------------ | | Family Name | Arial | | Subfamily Name | Bold | | Full Name | Arial Bold | | PostScript Name | Arial-BoldMT | }}} 3. DirectWrite / GDI+ / WPF 다른 API에서는 font name이 더 세분화된다. DirectWrite 예: * Font Family Name * Font Face Name * Full Font Name {{{+1 Facename과 Fontname에 왜 혼동이 생기나? }}} 1. 문서/예제에서 // set font name 처럼 등장한다. {{{#!gcode // set font name lstrcpy(lf.lfFaceName, TEXT("Arial")); }}} 2. UI에서 “글꼴 이름”이라고 표시된다. 결과적으로 font name이라는 말이 FaceName을 가리키는 관용어처럼 사용된다. {{{+1 코드 안에서 Facename 대신에 Fontname 이름을 써도 되나? }}} Fontname 변수명 / 메서드 이름이 틀린 건 아니다. 대부분의 개발자에게 `font name = 글꼴 이름 = Arial, 맑은 고딕` 등으로 자연스럽게 인식되기 때문에 FaceName에 들어가는 문자열을 FontName이라 부르는 건 관용적으로 흔한 일이다. 그렇지만 실무적으로는 써도 되지만 “정확한 코드”를 지향한다면 권장되지는 않는다. FontName이라는 이름은 다음 중 무엇인지 모호해질 수 있다. {{{ | 가능성 | 의미 | | --------------- | ---------------- | | Face Name | Arial | | Full Name | Arial Bold | | File Name | arialbd.ttf | | Display Name | Arial (TrueType) | | PostScript Name | Arial-BoldMT | }}} 이를테면 지금은 LOGFONT만 쓰더라도, 나중에 DirectWrite / GDI+ / 폰트 메타데이터를 섞으면 의미 충돌이 생긴다. 라이브러리·유지보수를 생각하면 faceName이 더 정확하고 안전하다. ---- CategoryDocument