CreateFontA 함수(wingdi.h)
CreateFont 함수는 지정된 특성을 가진 논리 글꼴을 만듭니다. 이후에 논리 글꼴을 모든 디바이스의 글꼴로 선택할 수 있습니다.
통사론
HFONT CreateFontA(
[in] int cHeight,
[in] int cWidth,
[in] int cEscapement,
[in] int cOrientation,
[in] int cWeight,
[in] DWORD bItalic,
[in] DWORD bUnderline,
[in] DWORD bStrikeOut,
[in] DWORD iCharSet,
[in] DWORD iOutPrecision,
[in] DWORD iClipPrecision,
[in] DWORD iQuality,
[in] DWORD iPitchAndFamily,
[in] LPCSTR pszFaceName
);
매개 변수
[in] cHeight
글꼴의 문자 셀 또는 문자의 높이(논리적 단위)입니다. 문자 높이 값(em 높이라고도 함)은 문자 셀 높이 값에서 내부 선행 값을 뺀 값입니다. 글꼴 매퍼는 다음과 같은 방식으로 nHeight 지정된 값을 해석합니다.
값 | 의미 |
---|---|
|
글꼴 매퍼는 이 값을 디바이스 단위로 변환하고 사용 가능한 글꼴의 셀 높이와 일치시킵니다. |
|
글꼴 매퍼는 일치 항목을 검색할 때 기본 높이 값을 사용합니다. |
|
글꼴 매퍼는 이 값을 디바이스 단위로 변환하고 사용 가능한 글꼴의 문자 높이와 절대값을 일치시킵니다. |
모든 높이 비교에서 글꼴 매퍼는 요청된 크기를 초과하지 않는 가장 큰 글꼴을 찾습니다.
이 매핑은 글꼴이 처음으로 사용될 때 발생합니다.
MM_TEXT 매핑 모드의 경우 다음 수식을 사용하여 지정된 점 크기의 글꼴 높이를 지정할 수 있습니다.
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
[in] cWidth
요청된 글꼴에 있는 문자의 평균 너비(논리 단위)입니다. 이 값이 0이면 글꼴 매퍼가 가장 가까운 일치 값을 선택합니다. 가장 가까운 일치 값은 현재 디바이스의 가로 세로 비율과 사용 가능한 글꼴의 디지털 가로 세로 비율 간의 차이에 대한 절대값을 비교하여 결정됩니다.
[in] cEscapement
이스케이프 벡터와 디바이스의 x축 사이의 각도(10도)입니다. 이스케이프 벡터는 텍스트 행의 기본 줄과 평행합니다.
그래픽 모드가 GM_ADVANCED 설정되면 문자열 문자의 방향 각도와 독립적으로 문자열의 이스케이프 각도를 지정할 수 있습니다.
그래픽 모드가 GM_COMPATIBLE 설정되면 nEscapement 이스케이프와 방향을 모두 지정합니다. nEscapement
[in] cOrientation
각 문자의 기준선과 디바이스의 x축 사이의 각도(10도)입니다.
[in] cWeight
0~1000 범위의 글꼴 두께입니다. 예를 들어 400은 보통이고 700은 굵게 표시됩니다. 이 값이 0이면 기본 가중치가 사용됩니다.
편의를 위해 다음 값이 정의됩니다.
[in] bItalic
TRUE
[in] bUnderline
TRUE
[in] bStrikeOut
TRUE
[in] iCharSet
문자 집합입니다. 다음 값은 미리 정의되어 있습니다.
- ANSI_CHARSET
- BALTIC_CHARSET
- CHINESEBIG5_CHARSET
- DEFAULT_CHARSET
- EASTEUROPE_CHARSET
- GB2312_CHARSET
- GREEK_CHARSET
- HANGUL_CHARSET
- MAC_CHARSET
- OEM_CHARSET
- RUSSIAN_CHARSET
- SHIFTJIS_CHARSET
- SYMBOL_CHARSET
- TURKISH_CHARSET
- VIETNAMESE_CHARSET
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET 현재 시스템 로캘에 따라 값으로 설정됩니다. 예를 들어 시스템 로캘이 영어(미국)인 경우 ANSI_CHARSET로 설정됩니다.
다른 문자 집합이 있는 글꼴은 운영 체제에 있을 수 있습니다. 애플리케이션에서 알 수 없는 문자 집합이 있는 글꼴을 사용하는 경우 해당 글꼴로 렌더링된 문자열을 번역하거나 해석하지 않아야 합니다.
글꼴을 만들 때 일관된 결과를 얻으려면 OEM_CHARSET 또는 DEFAULT_CHARSET 지정하지 마세요. lpszFace 매개 변수에 서체 이름을 지정하는 경우 fdwCharSet 값이 lpszFace지정된 서체의 문자 집합과 일치하는지 확인합니다.
[in] iOutPrecision
출력 정밀도입니다. 출력 정밀도는 출력이 요청된 글꼴의 높이, 너비, 문자 방향, 이스케이프, 피치 및 글꼴 형식과 얼마나 가깝게 일치해야 하는지를 정의합니다. 다음 값 중 하나일 수 있습니다.
애플리케이션은 OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS 및 OUT_PS_ONLY_PRECIS 값을 사용하여 운영 체제에 지정된 이름의 글꼴이 둘 이상 포함된 경우 글꼴 매퍼가 글꼴을 선택하는 방법을 제어할 수 있습니다. 예를 들어 운영 체제에 래스터 및 TrueType 형식의 기호라는 글꼴이 포함된 경우 OUT_TT_PRECIS 지정하면 글꼴 매퍼가 TrueType 버전을 선택하게 됩니다. OUT_TT_ONLY_PRECIS 지정하면 다른 이름의 TrueType 글꼴로 대체해야 하는 경우에도 글꼴 매퍼가 TrueType 글꼴을 선택하게 됩니다.
[in] iClipPrecision
클리핑 정밀도입니다. 클리핑 정밀도는 부분적으로 클리핑 영역 외부에 있는 문자를 클리핑하는 방법을 정의합니다. 다음 값 중 하나 이상이 될 수 있습니다.
[in] iQuality
출력 품질입니다. 출력 품질은 GDI가 논리 글꼴 특성을 실제 실제 글꼴 특성과 일치시키려고 얼마나 신중하게 시도해야 하는지를 정의합니다. 다음 값 중 하나일 수 있습니다.
출력 품질이 DEFAULT_QUALITY, DRAFT_QUALITY 또는 PROOF_QUALITY 경우 SPI_GETFONTSMOOTHING 시스템 매개 변수가 TRUE
[in] iPitchAndFamily
글꼴의 피치 및 패밀리입니다. 두 개의 낮은 순서 비트는 글꼴의 피치를 지정하며 다음 값 중 하나일 수 있습니다.
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
애플리케이션은 부울 OR 연산자를 사용하여 피치 상수를 패밀리 상수와 조인하여 fdwPitchAndFamily 매개 변수의 값을 지정할 수 있습니다.
글꼴 패밀리는 일반적으로 글꼴의 모양을 설명합니다. 요청된 정확한 서체를 사용할 수 없는 경우 글꼴을 지정하기 위한 것입니다.
[in] pszFaceName
글꼴의 서체 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열의 길이는 종료 null 문자를 포함하여 32자를 초과하면 안됩니다. EnumFontFamilies 함수를 사용하여 현재 사용 가능한 모든 글꼴의 서체 이름을 열거할 수 있습니다. 자세한 내용은 비고를 참조하세요.
반환 값
함수가 성공하면 반환 값은 논리 글꼴에 대한 핸들입니다.
함수가 실패하면 반환 값은 NULL
발언
글꼴이 더 이상 필요하지 않은 경우 DeleteObject 함수를 호출하여 삭제합니다.
Windows용 글꼴을 제공하는 공급업체의 저작권을 보호하기 위해 애플리케이션은 항상 선택한 글꼴의 정확한 이름을 보고해야 합니다. 사용 가능한 글꼴은 시스템마다 다를 수 있으므로 선택한 글꼴이 항상 요청된 글꼴과 동일하다고 가정하지 마세요. 예를 들어 Palatino라는 글꼴을 요청하지만 시스템에서 이러한 글꼴을 사용할 수 없는 경우 글꼴 매퍼는 특성이 비슷하지만 이름이 다른 글꼴을 대체합니다. 항상 선택한 글꼴의 이름을 사용자에게 보고합니다.
OS의 다른 언어 버전에서 적절한 글꼴을 얻으려면 LOGFONT 구조에서 원하는 글꼴 특성으로 EnumFontFamiliesEx 호출한 다음 적절한 서체 이름을 검색하고 CreateFont 또는 CreateFontIndirect사용하여 글꼴을 만듭니다.
CreateFont,CreateFontIndirect및 CreateFontIndirectEx 대한 글꼴 매퍼는 로캘에 관계없이 영어 및 지역화된 서체 이름을 모두 인식합니다.
다음 상황에서는 ClearType 앤티앨리어싱을 지원하지 않습니다.
- 프린터에서 렌더링된 텍스트입니다.
- 256개 이하의 표시 집합입니다.
- 터미널 서버 클라이언트에 렌더링된 텍스트입니다.
- 글꼴이 TrueType 글꼴이나 TrueType 윤곽선이 있는 OpenType 글꼴이 아닙니다. 예를 들어 다음에서는 ClearType 앤티앨리어싱을 지원하지 않습니다. 유형 1 글꼴, TrueType 윤곽선이 없는 Postscript OpenType 글꼴, 비트맵 글꼴, 벡터 글꼴 및 디바이스 글꼴.
- 이 글꼴은 포함된 비트맵을 포함하는 글꼴 크기에 대해서만 포함된 비트맵을 튜닝했습니다. 예를 들어 이는 일반적으로 동아시아 글꼴에서 발생합니다.
예제
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
{
RECT rect;
HFONT hFontOriginal, hFont1, hFont2, hFont3;
hdc = BeginPaint(hWnd, &ps);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
//The width, when set to 0, will cause the font mapper to choose the closest matching value.
//The font face name will be Impact.
hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100,100,700,200);
SetTextColor(hdc, RGB(255,0,0));
DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
//The font face name will be Times New Roman. This time nEscapement is at -300 tenths of a degree (-30 degrees)
hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
SelectObject(hdc,hFont2);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100, 200, 900, 800);
SetTextColor(hdc, RGB(0,128,0));
DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed.
//The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
SelectObject(hdc,hFont3);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 500, 200, 1400, 600);
SetTextColor(hdc, RGB(0,0,255));
DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);
SelectObject(hdc,hFontOriginal);
DeleteObject(hFont1);
DeleteObject(hFont2);
DeleteObject(hFont3);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
또 다른 예제는 메뉴 사용
메모
wingdi.h 헤더는 CREATEFont를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | wingdi.h(Windows.h 포함) |
라이브러리 | Gdi32.lib |
DLL | Gdi32.dll |
참고 항목
CreateFontIndirect
CreateFontIndirectEx
DeleteObject
EnumFontFamilies
LOGFONT
SelectObject