#25. 폰트 빨리 다듬어놓기

폰트 객체 하나를 쓸려고 LOGFONT를 사용하여 일일이 A부터 Z까지 속성을 다 지정해줘야 했던 귀찮은 점을 해결하는 방법이 없을까 하고 고민하시는 분들이 계신 것 같아서 팁으로 올립니다.


보통 LOGFONT 구조체나 CFont 클래스를 사용해서 폰트를 지정해왔습니다만 여간 불편한게 아니죠. 이럴 때에 빨리 써먹을 수 있는 CFont 클래스의 멤버 함수가 있는데 CreatePointFont() 라는 함수가 있습니다. 함수 사양을 살펴보도록 하지요.


BOOL CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL);


일단 리턴은 불리언 타입이니까 void처럼 그냥 쓰시면 되구요 Exception 처리를 위해서 조건문이나 조건식을 사용하셔도 됩니다. 하지만 일반적으로 폰트 생성에 실패할 일은 드무니까 신경 안쓰셔도 됩니다.


주어진 파라메터들을 보면 이렇습니다.



    int nPointSize : 글꼴의 크기를 지정합니다. (단위 : 포인트, pt)


    LPCTSTR lpszFaceName : 글꼴의 이름을 지정합니다. (유니코드 문자 사용 가능)


    CDC pDC : 로직 유닛을 변경하고자 하는 DC의 주소값을 던져주면 되고 단순한 글꼴 생성이라면 이 파라메터를 NULL로 설정하든지 그냥 생략하든지 상관없습니다.


이렇게해서 만들어진 폰트를 로그 폰트로 추출해 낼때는 어떤 멤버 함수를 사용할까요? 바로, GetLogFont()입니다. 함수 사양을 살펴보도록 하지요.



    int GetLogFont(LOGFONT pLogFont);



    • LOGFONT* pLogFont : 값이 저장될 로그폰트 구조체의 주소값을 던져주면 됩니다.

리턴값이 int이므로 역시 void처럼 사용하되 예외 처리를 하고 싶다면 다음 사항에 유의하십시오.



  • 올바르게 변환이 되었으면 0을 내보냅니다.
  • 그렇지 않을 경우 0이외의 아무값이나 내보냅니다.

이렇게 해서 구해진 로그폰트 구조체를 가지고 테스트를 해보면 아주 만족스러운 결과를 얻을 수 있을 것입니다. 빠른 폰트 생성을 위한 요령이니 앞으로도 많이 활용하시기 바랍니다. 또한 이런 일련의 팁을 함수화시켜서 클래스 갤러리에 등록시켜놓는것도 유용한 방법일 것입니다.


좀 더 응용한다면 이런 방법 대신 CFontDialog라는 Windows 공용 대화 상자 클래스를 사용해서 받아내면 더 유용할 것입니다.  

댓글 남기기