본문 바로가기
프로그래밍

👨‍💻 [MFC] MFC 에서 DrawText 할 때 Underline 을 표시하는 방법은 어떻게 되나요?

by 밝음의기둥 2025. 3. 11.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

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


반응형