[MFC] HDC 텍스트 출력, TextOut, CFont

HDC에 도형을 그리는 방법은 여기를 참고해주시기 바랍니다.

오늘은 HDC에 텍스트를 출력하는 방법을 알아보겠습니다.
Static Control을 하나 생성해주시고 ID를 IDC_STATIC_DISP로 합니다.

그런 다음 확인버튼을 더블 클릭 하여 아래와 같이 코딩해줍니다.

void CMFCApplication2Dlg::OnBnClickedOk()
{
	HWND hwndDisp = m_stDisp.GetSafeHwnd(); // STATIC Control윈도우 핸들 얻기
	HDC hdcDisp = ::GetDC(hwndDisp); // STATIC DC 얻기

	CString sTxt(_T("텍스트 출력 예제"));
	::TextOut(hdcDisp, 10, 10, sTxt, sTxt.GetLength());	// 텍스트 출력
	
	::ReleaseDC(hwndDisp, hdcDisp);
	::DeleteDC(hdcDisp);
}

실행 시켜 보면 아래와 같이 출력 됩니다.

위 방식대로 하면 텍스트 주변에 하얀색 배경이 그려지게 됩니다. 이 색을 변경하고 싶으시면 TextOut함수를 호출 하기 전에 아래 SetBkColor 함수를 사용하시면 됩니다.

::SetBkColor(hdcDisp, RGB(255, 0, 0));

배경을 투명하게 하고싶으시면 아래 SetBkMode 함수를 사용하시면 됩니다.

::SetBkMode(hdcDisp, TRANSPARENT)

CFont를 사용하시면 글자를 더 자세히 바꿀 수 있습니다.

CFont cFont;
cFont.CreateFont(
	30, // 글자높이
	10, // 글자너비
	0, // 출력각도
	0, // 기준 선에서의각도
	FW_HEAVY, // 글자굵기
	FALSE, // Italic 적용여부
	TRUE, // 밑줄 적용 여부
	FALSE, // 취소선 적용 여부
	DEFAULT_CHARSET, // 문자셋 종류
	OUT_DEFAULT_PRECIS, // 출력 정밀도
	CLIP_DEFAULT_PRECIS, // 클리핑 정밀도
	DEFAULT_QUALITY, // 출력 문자품질
	DEFAULT_PITCH, // 글꼴 Pitch
	_T("Arial Balck") // 글꼴
);
::SelectObject(hdcDisp, cFont);
::TextOut(hdcDisp, 10, 70, sTxt, sTxt.GetLength());	// 텍스트 출력

전체 코드는 아래와 같습니다.

void CMFCApplication2Dlg::OnBnClickedOk()
{
	HWND hwndDisp = m_stDisp.GetSafeHwnd(); // STATIC Control윈도우 핸들 얻기
	HDC hdcDisp = ::GetDC(hwndDisp); // STATIC DC 얻기

	CString sTxt(_T("텍스트 출력 예제"));
	::TextOut(hdcDisp, 10, 10, sTxt, sTxt.GetLength());	// 텍스트 출력

	::SetBkColor(hdcDisp, RGB(255, 0, 0));
	::TextOut(hdcDisp, 10, 30, sTxt, sTxt.GetLength());	// 텍스트 출력

	::SetBkMode(hdcDisp, TRANSPARENT);
	::TextOut(hdcDisp, 10, 50, sTxt, sTxt.GetLength());	// 텍스트 출력

	CFont cFont;
	cFont.CreateFont(
		30, // 글자높이
		10, // 글자너비
		0, // 출력각도
		0, // 기준 선에서의각도
		FW_HEAVY, // 글자굵기
		FALSE, // Italic 적용여부
		TRUE, // 밑줄 적용 여부
		FALSE, // 취소선 적용 여부
		DEFAULT_CHARSET, // 문자셋 종류
		OUT_DEFAULT_PRECIS, // 출력 정밀도
		CLIP_DEFAULT_PRECIS, // 클리핑 정밀도
		DEFAULT_QUALITY, // 출력 문자품질
		DEFAULT_PITCH, // 글꼴 Pitch
		_T("Arial Balck") // 글꼴
	);
	::SelectObject(hdcDisp, cFont);
	::TextOut(hdcDisp, 10, 70, sTxt, sTxt.GetLength());	// 텍스트 출력
	
	::ReleaseDC(hwndDisp, hdcDisp);
	::DeleteDC(hdcDisp);
}