반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
MFC 에서 DrawText 할 때 Underline 을 표시하는 방법은 어떻게 되는지 간략히 알아보았습니다.

질문 >
MFC 에서 DrawText 할 때 Underline 을 표시하는 방법은 어떻게 되나요?
답변 >
MFC에서 DrawText를 사용할 때 밑줄(Underline) 을 표시하려면, 폰트 속성에 밑줄을 설정한 후 해당 폰트를 사용하여 텍스트를 그리는 방식을 사용해야 합니다.
✅ 방법 1: LOGFONT를 사용하여 밑줄 설정
MFC에서는 LOGFONT 구조체를 사용하여 밑줄이 있는 폰트를 생성할 수 있습니다.
🎯 코드 예제 (밑줄이 있는 텍스트 그리기)
void CMyView::OnDraw(CDC* pDC)
{
// 기존 폰트 백업
CFont* pOldFont = pDC->GetCurrentFont();
// 현재 사용 중인 폰트 정보 가져오기
LOGFONT logFont = { 0 };
pOldFont->GetLogFont(&logFont);
// 밑줄 속성 추가
logFont.lfUnderline = TRUE;
// 새로운 밑줄 폰트 생성
CFont underlineFont;
underlineFont.CreateFontIndirect(&logFont);
// 새 폰트 적용
CFont* pOldSelectedFont = pDC->SelectObject(&underlineFont);
// 텍스트 출력
CString strText = _T("This text has an underline.");
CRect rect(10, 10, 300, 50);
pDC->DrawText(strText, &rect, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
// 원래 폰트 복원
pDC->SelectObject(pOldSelectedFont);
}
✅ 방법 2: SetTextCharacterExtra를 사용하여 수동으로 밑줄 긋기
DrawText로 텍스트를 그린 후, 텍스트 아래에 선을 직접 그리는 방법도 가능합니다.
🎯 코드 예제 (수동 밑줄)
void CMyView::OnDraw(CDC* pDC)
{
CString strText = _T("Underlined Text Example");
CRect rect(10, 10, 300, 50);
// 글자 출력
pDC->DrawText(strText, &rect, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
// 텍스트 크기 계산
CSize textSize = pDC->GetTextExtent(strText);
// 밑줄 위치 계산 (텍스트 아래 2픽셀)
int yUnderline = rect.top + textSize.cy + 2;
// 밑줄 그리기
pDC->MoveTo(rect.left, yUnderline);
pDC->LineTo(rect.left + textSize.cx, yUnderline);
}
📌 주의: 이 방법은 폰트 크기 및 텍스트에 따라 위치를 조정해야 할 수도 있습니다.
✅ 결론
방법 | 장점 | 단점 |
LOGFONT 사용 (lfUnderline = TRUE) | 시스템 폰트 설정을 활용하여 깔끔한 밑줄 표시 가능 | CFont를 새로 만들어야 함 |
LineTo로 직접 밑줄 긋기 | 기존 폰트 유지 가능, 자유로운 커스텀 가능 | 수동으로 선 위치를 조정해야 함 |
가장 쉬운 방법은 첫 번째 방법 (LOGFONT 사용) 입니다.
하지만 밑줄 스타일을 더 커스텀화하려면 두 번째 방법을 고려할 수 있습니다. 🚀
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com
반응형
'프로그래밍' 카테고리의 다른 글
👨💻 [MFC] MFC 에서 이미지 파일이 깨졌는지 확인하려면 어떻게 해야 하나요? (0) | 2025.03.27 |
---|---|
👨💻 [MFC] MFC 의 COleDateTime 에서 특정 날짜를 빼려면 어떻게 해야 하나요? (0) | 2025.03.22 |
👨💻 [MFC] MFC 에서 GetFileVersionInfoSize 함수의 헤더 파일은 어떻게 되나요? (0) | 2025.03.10 |
👨💻 [MFC] MFC 에서 실행파일의 ProductName 과 ProductVersion 알아내는 방법은 어떻게 되나요? (0) | 2025.03.10 |
👨💻 [CEF] CEF 의 객체를 여러개 생성해서, SetZoomLevel 을 호출하면, 모두 동시에 적용되는데, 각각 적용하는 방법은 어떻게 되나요? (0) | 2025.03.05 |