본문 바로가기
WinAPI

다시 공부 하는 Win API (9) - UI - Inventory 제작(1)

by Srff5123 2025. 12. 12.
728x90

저번 버튼을 통한 간단한 이벤트 구현에 대한 공부를 하였다

이제 더 나아가 여러 UI 중 Inventory를 구현 해보고자 한다.

 

우선 구현하기에 앞서 저번 버튼을 구현할때 버튼 구분을 위한 텍스트를 버튼위에 생성을 해주었는데 텍스트가 생성되는 

사각형 경계안은 흰색으로 처리가되어 조금 불편함이 있었기에 이것을 먼저 바꾸어준다.

GameManger.cpp파일로 이동하여 생성자 부분에 SetBkMode기능을 사용하면 깔끔하게 나오게 된다.

 

Scene파일에 InventoryScene.h파일을 만들고 필요한 버튼과 기능에 대한 선언 및 정의를 해준다.

색상은 저번에 했던 빨주파는 가독성이 많이 떨어지는 느낌이라 흰색에서 점점 어두워지는 효과로 나타나도록 바꾸었다.

다음 글꼴 또한 좀 더 다른 것으로 바꾸기 위해 본인이 하고 싶은 글꼴 ttf를 다운받아 설치하고 

Button.cpp에서 생성자에서 글꼴 선택 후 Render로 표출해주면 된다.

 

이제 InventoryScene을 만들었으니 실제로 버튼을 통해 창을 띄우기 위해서 UI에 Panel.h를 만들자

패널들을 가운데에 배치하기 위한 편의성을 올리기 위해 framework에 중간 위치 벡터값 추가

 

 

Panel.h 파일을 만들고 패널들이 필요한 공통 기능을 넣어준다.

 

 

현재 생각해둔 패널은 상점, 인벤토리, 장비 총 세개로 구성되어 있으며,

버튼을 통해 하나씩 켰다가 끄는 방식으로 진행할 예정이다 그렇기에 우선 이 세개를 index로 정수로 관리를 하여 켜줄려고한다.

1번 버튼누르면 store 이런식으로   InventoryScene에서 CreatePanels패널 생성 함수와 OnClickButton 들어오는 정수값을 매개변수로 받아 어떤 창을 띄워줄지 판단하는 함수 그리고 Panel을 벡터로 잡아준다.

 

  다음 cpp파일로 이동해 창을 띄울때 필요한 작업을 진행하고

 

 

버튼에 따른 정수 반환을통한 창 띄우는 코드와 창을 렌더해주는 코드를 활성화 해준다.

 

다음 panel.cpp로 이동하여 패널을 열고, 닫는 버튼을 활성화 시켜주면 된다.

 

이제 공통적으로 필요한 패널의 대한 기능은 대강 구현하였고 세부 패널에 대한 작업을 진행하며 더 추가를 하거나 하면 되겠다.

우선 엑셀 또는 스프레드를 통해 csv파일을 만들어야 한다.

이곳에서 우리는 아이템을 관리할 것이다.

지금은 하나의 스프레드를 통해 작성을 하지만 좀 더 구조를 만들려고 한다면 스프레드를 더 추가하여

검 하나가 아닌 Sword 이런식으로 바꾸거나 아이템에 따라 더 세부적인것을 다른 스프레드에서 해줄 수 있다.

이제 만들어진 csv파일을 Resource 폴더와 그안에 Table폴더를 만들어 넣어주고 

framework.h에서 파일을 읽어주는 라이브러리 fstream을 추가해준다.

 

 

이제 해당 파일을 읽고 아이템을 관리 해줄 파일을 만들기 위해

Manager폴더를 만들어 그안에 DataManager.h파일을 만들어 준다.

싱글톤을 받아주고 struct로 아까 설정한 필요한 데이터 값을 구조로 만들어주고

파일을 읽어줄 함수 LoadData와 아이템 정보를 가져올 GetItem 함수를 만들어준다.

다음 해당 데이터 값을 키 값으로 보관할 해시맵 data를 선언한다.

다음 파일을 읽어주기 위해 Sprit문자열 구분을 해줄 함수를 만들건데 이거는 여러 부분에서 쓸 수도 있을 것이기 때문에

Utilty폴더에 Utility.h를 만들어 관리를 해준다.   

 

다음 InventoryScene.cpp에서 파일을 가져와 읽고

 

파일이 잘 가져와지는지 확인이 되면 완료다.

파일 경로 오류인지 열리지 않아 다음 글에서 수정해서 올리겠다.

728x90