[MFC] 글꼴 및 문자열 다루는 방법

[MFC] 글꼴과 문자열 다루는 방법


 

이번 포스팅에서는 MFC에서 글꼴과 문자열을 어떻게 다루는지에 대하여 간단히 알아 보도록 하겠습니다.


 

우선 프로젝트를 생성하여 글꼴을 적용하기 이전에 각각에 필요한 클래스 및 함수에 대해서 익혀 보도록 하겠습니다.


 

글꼴을 만들 때 필요한 구조체는 LOGFONT 구조체로써 LOGFONT 구조체의 선언은 아래와 같이 되어 있습니다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

typedef struct tagLOGFONTW

{

    LONG lfHeight;

    LONG lfWidth;

    LONG lfEscapement;

    LONG lfOrientation;

    LONG lfWeight;

    BYTE lfItalic;

    BYTE lfUnderline;

    BYTE lfStrikeOut;

    BYTE lfCharSet;

    BYTE lfOutPrecision;

    BYTE lfClipPrecision;

    BYTE lfQuality;

    BYTE lfPitchAndFamily;

    WCHAR lfFaceName[LF_FACESIZE];

} LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;

#ifdef UNICODE

typedef LOGFONTW LOGFONT;

Colored by Color Scripter

cs


이 중에 lfHeight 멤버는 글꼴의 높이를 픽셀 단위로 명시하고, lfFaceName 멤버는 글꼴의 이름을의미하며, lfWidth는글꼴의 장평을 결정합니다. 그 외 설명은 필요하실 때 MSDN 또는 구글링을 통해 알아보시고 사용하시면 되겠습니다.


   그리고 사용자가 원하는 문자열을 출력할 때 필요한 함수는TextOut()함수가 있습니다.


   위와 같은 함수들을 이용하여 이제 가볍게 빈 FormButton 하나를 배치하여 해당 버튼을 클릭하면 범범조조!!! 라는 문구를 크기 별로 출력하는 것을 예제로 보여드리도록 하겠습니다.

 

   그러면 빈 프로젝트의 대화상자 기반 MFC 프로젝트를 아래와 같이 생성해 주시기 바랍니다.




   그리고 위의 모든 컨트롤을 지워 주시고 아래와 같이 버튼 컨트롤 하나를 배치해 주시기 바랍니다.




이제 버튼 컨트롤을 더블클릭 하셔서 해당 클릭 이벤트 핸들러 함수 안에 아래와 같이 코드를 작성해 주시기 바랍니다.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

void CtestDlg::OnBnClickedButton1()

{

    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

    CDC *dc = GetDC();

 

    int nY = 0;

    CFont Font;

    CFont* pOldFont;

 

    LOGFONT lf;

    ::ZeroMemory(&lf, sizeof(lf));

    wsprintf(lf.lfFaceName, TEXT("%s"), TEXT("Arial"));

 

    for(int i = 20; i < 35; i++)

    {

        lf.lfHeight = i;

        nY += i;

 

        //Arial, 크기  20 ~ 34까지 폰트 객체를 생성

        Font.CreateFontIndirectW(&lf);

 

        //생성된 폰트로  범범조조!!! 라는 문자열을 출력

        pOldFont = dc->SelectObject(&Font);

        dc->TextOutW(10, nY, TEXT("범범조조!!!"));

        dc->SelectObject(pOldFont);

 

        //폰트 객체 삭제

        Font.DeleteObject();

    }

}

 

Colored by Color Scripter

cs


간단히 코드를 설명 드리면 해당 윈도우의 DC 객체 포인터를 반환 받고, FONT 객체 및 LOGFONT 객체를 선언하여 글자 크기가 20부터 34 사이즈만큼 총 15개의 범범조조!!! 문구가 출력되게 끔 하는 로직입니다.

 

안의 코드 내용은 크게 어렵지 않다고 생각합니다.

 

실행결과 화면



 

이렇게 간단히 MFC 글꼴 및 문자열을 다뤄보는 연습을 해봤습니다. 이제 위 코드를 갖고 실제 응용을 해보시면 실력이 더 향상 될거라 믿습니다.^^

 

감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY