글꼴 만들기 및 선택

글꼴 일반 대화 상자는 글꼴을 만들고 선택하는 프로세스를 간소화합니다. CHOOSEFONT 구조를 초기화하고 CHOOSEFONT 함수를 호출하면 애플리케이션은 이전에 여러 줄의 사용자 지정 코드가 필요했던 것과 동일한 글꼴 선택 인터페이스를 지원할 수 있습니다. ( 글꼴 일반 대화 상자에 대한 자세한 내용은 일반 대화 상자 라이브러리를 참조하세요.)

사용자별 선택

대부분의 글꼴 만들기 및 선택 작업에는 사용자가 포함됩니다. 예를 들어 단어 처리 응용 프로그램을 사용하면 제목, 각주 및 본문 텍스트에 대해 고유한 글꼴을 선택할 수 있습니다. 사용자가 글꼴 대화 상자를 사용하여 글꼴을 선택하고 확인 단추를 누르면 CHOOSEFONT 함수는 요청된 글꼴의 특성으로 LOGFONT 구조체의 멤버를 초기화합니다. 텍스트 출력 작업에 이 글꼴을 사용하려면 먼저 애플리케이션에서 논리 글꼴을 만든 다음 해당 글꼴을 디바이스 컨텍스트로 선택해야 합니다. 논리적 글꼴은 애플리케이션에서 제공하는 이상적인 글꼴에 대한 설명입니다. 개발자는 CreateFont 또는 CreateFontIndirect 함수를 호출하여 논리 글꼴을 만들 수 있습니다. 이 경우 애플리케이션은 CreateFontIndirect를 호출하고 CHOOSEFONT에서 초기화된 LOGFONT 구조체에 대한 포인터를 제공합니다. 일반적으로 CreateFont에는 여러 매개 변수가 필요하지만 CreateFontIndirect에는 LOGFONT에 대한 포인터가 하나만 필요하기 때문에 CreateFontIndirect를 호출하는 것이 더 효율적입니다.

애플리케이션이 실제로 논리 글꼴로 텍스트 그리기를 시작하려면 먼저 디바이스에 내부적으로 저장된 글꼴과 리소스가 운영 체제에 로드된 글꼴에서 가장 가까운 일치 항목을 찾아야 합니다. 디바이스 또는 운영 체제에 저장된 글꼴을 실제 글꼴이라고 합니다. 지정된 논리 글꼴과 가장 밀접하게 일치하는 실제 글꼴을 찾는 프로세스를 글꼴 매핑이라고 합니다. 이 프로세스는 애플리케이션이 SelectObject 함수를 호출하고 논리 글꼴을 식별하는 핸들을 제공할 때 발생합니다. 글꼴 매핑은 요청된 논리 글꼴의 특성과 사용 가능한 실제 글꼴의 특성을 비교하는 내부 알고리즘을 사용하여 수행됩니다. 글꼴 매퍼 알고리즘이 검색을 완료하고 가능한 가장 가까운 일치 항목을 결정하면 SelectObject 함수가 반환되고 애플리케이션에서 새 글꼴로 텍스트 그리기를 시작할 수 있습니다.

SetMapperFlags 함수는 글꼴 매퍼 알고리즘이 실제 디바이스와 일치하는 가로 세로 비율을 가진 실제 글꼴만 검색하는지 여부를 지정합니다. 디바이스의 가로 세로 비율은 해당 디바이스의 픽셀 너비 및 높이에 따라 형성된 비율입니다.

시스템 글꼴(셸 또는 기본 글꼴이라고도 함)은 제목 표시줄, 메뉴 및 대화 상자의 텍스트에 사용되는 글꼴입니다.

특수 글꼴 선택 고려 사항

대부분의 글꼴 선택 작업에는 사용자가 포함되지만, 그렇지 않은 경우도 있습니다. 예를 들어 개발자는 애플리케이션에서 고유한 글꼴을 사용하여 컨트롤 창에 텍스트를 그릴 수 있습니다. 적절한 글꼴을 선택하려면 애플리케이션에서 사용할 수 있는 글꼴을 결정하고, 사용 가능한 이러한 글꼴 중 하나를 설명하는 논리 글꼴을 만든 다음, 해당 글꼴을 적절한 디바이스 컨텍스트로 선택할 수 있어야 합니다.

애플리케이션은 EnumFonts 또는 EnumFontFamilies 함수를 사용하여 사용 가능한 글꼴을 열거할 수 있습니다. EnumFontFamilies 는 패밀리 이름과 연결된 모든 스타일을 열거하므로 권장됩니다. 이 기능은 스타일이 많거나 특이한 글꼴과 국경을 초월하는 글꼴에 유용할 수 있습니다.

애플리케이션이 사용 가능한 글꼴을 열거하고 적절한 일치 항목을 찾은 후에는 글꼴 열거형 함수에서 반환된 값을 사용하여 LOGFONT 구조체의 멤버를 초기화해야 합니다. 그런 다음 CreateFontIndirect 함수를 호출하여 초기화된 LOGFONT 구조체에 대한 포인터를 전달할 수 있습니다. CreateFontIndirect 함수가 성공하면 애플리케이션은 SelectObject 함수를 호출하여 논리 글꼴을 선택할 수 있습니다. LOGFONT 구조체의 멤버를 초기화할 때는 lfCharSet 멤버에 특정 문자 집합을 지정해야 합니다. 이 멤버는 글꼴 매핑 프로세스에서 중요하며 이 멤버가 올바르게 초기화되지 않으면 결과가 일치하지 않습니다. LOGFONT 구조체의 lfFaceName 멤버에 서체 이름을 지정하는 경우 lfCharSet 값이 lfFaceName에 지정된 서체의 문자 집합과 일치하는지 확인합니다. 예를 들어 MS Mincho와 같은 글꼴을 선택하려면 lfCharSet 을 SHIFTJIS_CHARSET 미리 정의된 값으로 설정해야 합니다.

많은 동아시아 언어의 글꼴에는 영어 이름과 지역화된 이름이라는 두 개의 서체 이름이 있습니다. CreateFont, CreateFontIndirectCreateFontIndirectEx 는 언어와 일치하는 시스템 로캘에 대해 지역화된 서체 이름을 사용하지만 다른 모든 시스템 로캘의 영어 서체 이름을 사용합니다. 가장 좋은 방법은 한 이름을 시도하고 실패할 때 다른 이름을 시도하는 것입니다. 시스템 로캘이 글꼴의 언어와 일치하지 않는 경우 EnumFonts, EnumFontFamiliesEnumFontFamiliesEx 는 영어 서체 이름을 반환합니다. Windows 2000부터는 CreateFont, CreateFontIndirect 및 CreateFontIndirectEx의 글꼴 매퍼가 로캘에 관계없이 두 서체 이름을 인식하므로 더 이상 문제가 되지 않습니다.