승쨩개발공부

[MFC] 미니맵 본문

MFC

[MFC] 미니맵

SeungHyune 2022. 5. 9. 02:50

우리는 전 시간까지 타일을 깔고 피킹을 해보았다

그러면 이제 우리는 본격적으로 툴 기능을 수행하기 위해

이런 식으로 배치를 해보자.

 

먼저 툴 기능 수행창을 만들기 위해

 

CMyForm 클래스를 만들어준다.

기본 클래스는 CFormView로 한다

 

 

그리고 미니맵 생성을 위해

CMiniview 클래스를 만들어준다.

기본 클래스는 CView로 한다.

 

 

 

자 이제 MyForm 클래스와 Miniview클래스를 만들었으면 처음 계획한대로 창을 나눠주자

 

창을 분리하기 위해 MFC에서 제공해주는 CSplitterWnd 클래스를 사용해보자

 

메인프레임 클래스로 와서

MainSplitter와 SecondSplitter 맴버변수를 만들어주자

여기서 잠깐 왜 Splitter를 두개나 멤버변수를 만드냐?

창을 분리하더라도 기존의 ToolView가 사용할 창이 필요하므로,

Main Spllitter와 미니맵과 유닛툴로 사용할 SecondSplitter 로 창을 2열로 나눈다

 

그리고 필요한 헤더들을 MainFrame 클래스에 추가해주자

 

 

그 다음 Main Frame 클래스에서 OnCreateClient 함수 재정의 를 해주자

순서대로 눌러 함수를 재정의 해주면 된다.

 

 

그리고 OnCreateClient 함수에 MainSplitter와 SecondSplitter를 사용해 창을 분활해보자

 

CreateStatic은 분할 창을 만들어주는 함수이고, 인자들은

CreateStatic(부모 윈도우 주소, 행의 수, 열의 수, 창 스타일, 자식창 ID) 으로 되어있다

부모클래스는 상속 받고있으니 this로 해주고 1행 2열 로 나눠준다

그러면 MainSplitter는 

이런식으로 이쁘게 나뉘게된다.

 

CreateView는 분할 창에 표시할 뷰 정보를 만드는 함수이고, 인자들은

CreateView(배치할 행, 배치할 열, 배치할 view 창 객체 생성, 초기 크기, pContext) 으로 되어있다

 

0행 1열에 CToolView창 객체를 생성하고 WINCX, WINCY만큼 뷰창이 생성이 된다

 

 

 

자 그럼 이제 유닛툴과 미니맵을 사용할 SecondSplitter를 만들어보자

 

부모 윈도우를 MainSplitter로 주고 2행 1열로 생성하고 CreateView를 통해 0행 0열에는 미니맵을

1행 0열에는 유닛툴을 가로 세로 300만큼 사이즈를 줘서 생성한다.

 

그러면 실행화면은

우리가 계획한대로 창이 분활이 되었다.

이제 미니맵을 출력해보자

 

 

Terrain 클래스로 돌어와서

ToolView의 화면을 받기위해 ToolView클래스를 전방선언해주고 맴버변수를 만든다

그리고 뷰창을 바꾸기위해 SetMainView함수를 만든다

 

미니맵 랜더에는 딱히 index번호가 필요없으니 재외하고 만들어준다

 

 

다시 MinView Ondraw함수로 들어와 ToolView의 정보를 얻어온다

 

그러면 미니맵 이 정상적으로 출력이 되는것을 볼수있다

그런데 아직 피킹에 대한 처리를 하지않아서 미니맵에서 타일이 바뀌는것을 확인할수가 없다.

 

ToolView 클래스로 돌아와 OnLbuttonDown과 OnMoseMove를 재정의해준다

메인프레임을 얻어와주고
미니뷰의 SecondSplitter에있는 Get_Pane을 얻어와주고
미니뷰의 Invalidate를 호출해준다.

 

그러면 미니맵에 타일피킹이 정상적으로 작동을 할것이다.

 

 

 

 

그럼 이제 전체 타일을 보기위해 스크롤을 만들어보자

Toolview가 CView를 상속받고있는대
CScrollView로 바꿔주자 그리고 CView를 받는 함수들을 다 ScrollView로 바꿔준다

 

ToolView OnInitialUpdate에 스크롤 바의 사이즈를 지정해주자

 

Terrain클래스에 스크롤x값을 뺴주고 Y값을 뺴주고

GetClinetRect로 스크롤값에 핸들을 얻어온다

그러면 

스크롤이 정상적으로 Toolview로 얻어와진다

하지만 미니맵으로 전 화면을 제대로 볼수 없다.

제대로 보기위해 배율을 설정해주자

 

Terrain클래스에 Set_Ratio함수를 만들어주고 정의해준다

 

 

Mini_Render함수에 월드변환후 값을 넣어주면

 

 

전 화면을 볼수있도록 출력이 된다.

 

하지만 현재 스크롤 을 넣은상태이기떄문에 마우스 LBUTTON 과 마우스 LBUTTONMOVE를 

이런식으로 스크롤x,y값을 더해주면 정상 피킹이 가능하다

 

 

결과

 

다음에는 유닛툴을 만들어보도록 하자

'MFC' 카테고리의 다른 글

[MFC] 유닛툴2  (0) 2022.05.10
[MFC] 유닛툴1  (0) 2022.05.10
[MFC] 내적을 이용한 타일 피킹  (0) 2022.05.04
[MFC] 쿼터뷰 타일 배치  (0) 2022.05.03
[MFC] MFC란? Device 초기화  (0) 2021.11.17