WINAPI - Font
- 폰트도 펜이나 브러시와 마찬가지로 GDI 오브젝트이다.
- 문자열을 원하는 폰트로 출력하고자 한다면 먼저 폰트 오브젝트를 만들어 DC로 전송해야 한다.
→ 폰트를 만들기 위해서는 CreateFont 함수를 사용하며 이 함수가 리턴하는 핸들을 HFONT형의 변수에 대입한다.
→ 인수가 14개나 되며 이것은 그만큼 글꼴이 복잡한 모양을 가질 수 있다는 것이다.
→ 이 중 문자의 크기를 지정하는 nHeight 와 글꼴 모양을 지정하는 lpszFace 정도가 자주 변경되어 사용된다.
→ 예제
{
HDC hdc;
PAINTSTRUCT ps;
HFONT hFont, OldFont;
TCHAR *str = TEXT("폰트 Test 1234");
hdc = BeginPaint(hWnd, &ps);
hFont = CreateFont(50, 0, 0, 0, 0, 0, 0, 0, HANGEUL_CHARSET, 0, 0, 0, VARIABLE_PITCH|FF_ROMAN, TEXT("궁서"));
OldFont = (HFONT)SelectObject(hdc, hFont);
TextOut(hdc, 100, 100, str, lstrlen(str));
SelectObject(hdc, OldFont);
DeleteObject(hFont);
EndPaint(hWnd, &ps);
return 0;
}
→ 궁서체의 50픽셀 높이를 가지는 폰트 오브젝트를 만든 후 이 폰트를 DC에 선택하고 문자열을 출력하였다.
- 텍스트의 색상
→ 이전에 살펴본 문자열 정렬 상태를 지정하는 SetTextAlign 함수 외에 다음 세 함수에 대해 알아본다.
COLORREF SetBkColor(HDC hdc, COLORREF crColor);
int SetBkMode(HDC hdc, int iBkMode);
→ SetTextColor는 Text의 Color를 Set하는 함수이며 SetBkColor는 글자 뒤쪽의 배경 색상을 지정하는 함수이다.
→ 두 함수 다 COLORREF형의 인수를 취하므로 RGB 매크로 함수를 사용하여 원하는 색상을 설정한다.
→ 두 함수의 반대 함수는 GetTextColor, GetBkColor이며 이 함수들은 현재 설정된 문자색과 배경색을 조사한다.
→ SetBkMode 함수는 배경색상을 사용할 방법을 설정한다.
→ OPAQUE와 TRANSPARENT 두가지 옵션 중 한가지를 설정할 수 있으며 디폴트는 OPAQUE이다.
OPAQUE : 불투명한 배경을 사용한다. 그래서 배경 색상에 의해 뒷쪽의 그림이 지워진다. 이모드가 디폴트이다.
TRANSPARENT : 투명한 배경색상을 사용한다. 그래서 문자를 출력한 후에도 배경이 바뀌지 않는다. 즉, 문자 획 사이의 여백에 있는 원래 배경이 지워지지 않는다.
→ 바둑판 모양의 사각형을 그려 배경을 만든 후 노란색 배경에 빨간색 글자를, 모드를 바꾸어 가며 출력해 보았다.
→ 불투명한 배경 모드를 사용한 경우는 배경의 바둑판 모양이 지워지지만 투명한 배경 모드를 사용하면 글자 사이사이로 바둑판 모양이 그대로 남아 있는다. 비트맵이나 그림 위에 문자열을 출력한다면 투명 모드를 사용해야 할 것이다.