*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
- 지난번에 만든 CFont, CFontManager 관련해서, 글꼴이 바뀌지 않는 문제가 있어 수정이 필요하다.
- 폰트가 위에서 아래로 바뀌어서 잘 적용되고 있는 줄 알았는데,
알고 보니 원하는 폰트로 바뀐 것이 아니라 폰트가 제대로 로드되지 않아 윈도우 기본 출력인 굴림체로 바뀐 것이었다.
- 다른 폰트를 로드해 봤는데 똑같은 폰트만 출력되어서 알아챘음.
[ 문제점 ]
- 폰트 파일은, AddFontResource() 함수를 통해서 윈도우가 켜져 있는 동안 임시로 로드할 수 있다.
- 그런데 로드된 폰트 리소스 파일을 불러올 때, 사람이 직접 폰트 이름을 지정해주는 것이 아니라,
폰트 파일을 열면 나오는 '글꼴 이름'에 있는 명칭을 사용하여 로드해주어야 한다.
- 그런데, 코드에서는 이 글꼴 이름이 아닌, 로드할 때 썼던 파일명을 통해 폰트 불러오기를 시도했었고, 이때문에 정상적으로 폰트 로드가 이루어지지 않았던 것이다.
- 또한, 임시로 로드한 이 폰트는 종료할 떄 RemoveFontResource() 함수에서 다시 제거해주어야 한다.
-- 그러므로, 폰트를 로드할 때 썼던 풀 경로를 변수에 저장해 두었다가 소멸자에서 제거해 주는 작업을 추가로 해 주어야 한다.
class CFontManager
{ std::vector<std::tstring> m_LoadedFontFullpath }
- 로드된 폰트의 풀 경로를 저장해놓는다.
소멸자에서 RemoveFontResource() 함수에 인자로 전달할 내용들이다.
- 2개의 메소드로 오버로드되어있던 LoadFont()를, 이름을 두 개로 나누어준다.
< bool LoadFontResource(const std::tstring& FontFileName, const std::string& PathName = FONT_PATH) >
- 여기서 AddFontResource() 함수를 호출하여 폰트 파일을 로드하는 기능을 담당한다.
- AddFontResource() 함수가 제대로 로딩에 성공했을 경우, m_LoadedFontFullpath에 경로를 추가해 준다.
< bool LoadFontInfo(const std::string& Name, const std::tstring& FontName, int Width, int Height) >
1. 코드 안에서 쓸 '이름'
2. 폰트 파일을 열면 나오는 '폰트 이름'
3, 4. 출력 사이즈
- 이 메소드에서 받은 인자를, CFont의 LoadFont() 메소드에 전달한다.
< ~CFontResource() >
- m_LoadedFontFullpath를 순회 돌면서 RemoveFontResource()를 실행해 준다.
class CFont
< LoadFontInfo() >
- LoadFont() -> LoadFontInfo()로 바꿔줌
{ LOGFONT m_FontInfo } 변수에 설정값들을 저장한다.
m_FontInfo.lfFaceName은, 폰트 이름(FontName) 을 활용하여 만들어주어야 정상적으로 로딩된다.
class CResourceManager;
class CSceneResource;
- 이 클래스의 폰트 관련 메소드도 바뀐 형식에 맞게 바꾸어준다.
- 이젠 이렇게 폰트 리소스 로드를 해 준 뒤에, 폰트를 프로그램 안에서 불러올 때는 '폰트 이름'도 전달해 주어야 한다.
- 폰트가 잘 로딩되는지 현재 출력중인 텍스트의 폰트를 바꾸어 보았다.
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
72. 타일맵 에디터 3: 스프라이트 텍스처의 프레임 좌표 지정 (0) | 2022.06.14 |
---|---|
71. 타일맵 에디터2: 타일에 텍스처 지정 (0) | 2022.06.13 |
69. 타일맵 에디터1: 제작 및 타일맵 불러오기 (0) | 2022.06.12 |
68. 타일 맵 (0) | 2022.06.10 |
67. 화면의 확대 (0) | 2022.06.10 |