[MFC] 시스템의 폰트를 모두 얻는 방법

2008. 5. 2. 15:56Coders

EndUser 를 위해 간결한 폰트 설정 다이얼로그를 만들다가 여기 적어 놓는다.
참고로, 해당 코딩은 SDI 의 View

주의점
시스템에 설치되어 있는 폰트 목록을 구하기 위해서는 EnumFontFamilies 함수로 폰트 열거를 해야 한다. 폰트 열거는 시스템의 모든 폰트 정보를 조사해야 하므로 다소 시간이 걸리며 따라서 이 작업은 응용 프로그램이 시작될 때 한번만 하며 그 결과를 전역 배열에 저장해 두고 계속 사용하게 된다. 다만 시스템의 폰트 구성이 실행중에 변경되었다면 다시 열거를 해야 하는데 그 시점이 바로 WM_FONTCHANGE 메시지를 받았을 때이다. 폰트 목록을 사용하는 프로그램은 이 메시지를 반드시 처리해야 한다.

  1. int CALLBACK EnumFontsProc(
  2.         ENUMLOGFONT FAR *lpelf,
  3.         NEWTEXTMETRIC FAR *lpntm,
  4.         int FontType,
  5.         LPARAM lParam)
  6. {
  7.         TRACE(_T("%s\n"), (LPSTR)lpelf->elfFullName);
  8.  
  9.         //lParam 을 casting 해서 사용..
  10.  
  11.         return 1;
  12. }
  13.  
  14. ...
  15.  
  16. HDC hdc = ::GetDC(this->m_hWnd);
  17.  
  18. TRACE(_T("************************************\n"));
  19. ::EnumFontFamilies(hdc, NULL, (FONTENUMPROC)EnumAddFontsProc, (LPARAM)this);
  20. TRACE(_T("************************************\n"));