이번에는 Win API의 UI를 다루어 보고자 한다.
저번 F1,2키를 이용하여 화면을 전환하는 것을 하였는데 이번에는 Button을 이용하여 화면 전환을 해보겠다.
우선 도형을 그려주던 부분을 조금 더 세분화 하기 위해
Basic폴더를 만들고 그 안에 GameObject.h 오브젝트를 관리할 파일을 만들어준다.

다음 기존에 있던 Circle.h 파일로 이동하여 GameObject의 자식으로 만들고 중심을 잡아주는 부분을 제거하여준다.

다음 네모를 그려주는 부분의 작성을 위해 Basic파일에 Rect.h를 만들어준다.
기존에 있던 Circle.h와 cpp도 Basic파일로 이동시켜 관리한다.


C++은 객체를 만들 때 이미 만들어진 뒤 수정을 하는 것이 아닌 만들면서 초기화를 하는 것을 원칙으로 한다.
그렇기에 부모(GameObject)는 Rect 객체 내부에 포함되어 있으며
Rect를 만들 때 GameObject도 동시에 생성이 된다 이때 GameObeject는 center값이 필요함으로
자식 클래수(Rect)에서 부모 생성자를 직접 호출하여 Center값을 선언해주어 해결 한다.
이를 이용하면 생성과 동시에 초기값이 설정 되기에 효율적으로 사용할 수 있다.
- 단순한 값 변경은 가능하나 초기화의 경우는 이니셜라이저 리스트에서만 가능
- 만약 멤버가 상수인 경우, 참조 멤버인 경우에는 필수적으로 이니셜라이저를 통해 초기화 해야함 -


이제 간단한 테스트 버튼을 그려주기 위해 UI폴더와 Button.h,cpp파일을 만들어준다.


다음 저번 TitleScene으로 이동하여 시작버튼과 나가기버튼을 구현해준다.



버튼 이벤트 구현을 하기 전에 Rect 사각형을 조금 편하게 그리기 위해 바꾸어주고 기존에 사각형을 그리기 위해 사용된던 것들도 통일하게 바꿔준다.

이제 버튼을 눌렀을 경우 이벤트 구현을 할것인데. 사각형의 범위 안에 마우스 포인트가 충돌되는지 안되는지를 검사하여 구현한다.

충돌이 일어났을 경우 업데이트를 하기 위해 Button.cpp로 이동해 클릭 시 색이 변하도록 해준다.

그런 다음 TitleScene.cpp에서 버튼 생성
다음 버튼의 눌림 상태에 따른 색변화를 좀 더 깔끔하게 작성하기 위해
마우스 상태에 따른 enum을 만들어 색변화를 구현해준다.


이제 실행을 해서 확인해보면 ,
마우스 충돌 전 - 밝은색
마우스 충돌 이후 - 어두워짐
버튼 클릭 - 더 어두워짐 이런식으로 잘 구현된것을 확인 할 수 있다.


이제 버튼동작이 제대로 되는 것을 확인 하였으니 버튼을 누르면 게임시작, exit를 누르면 프로그램 종료가 되도록 구현을 해보자
TitleScene.h로 이동해 이벤트 함수를 만들고 cpp에 정의한다.

다음 framework.h에 functional라이브러리를 추가해준다.
functional은 함수를 변수처럼 저장하고, 전달하는 라이브러리이다.
C++에서 함수를 Callback으로 만들거나 특정 조건에 따라 실행할 행동을 바꾸는 것을 위해 사용된다.
실제에서는 이벤트(UI처리), 멀티스레드 작업 전달, 전략패턴, 상태머신 등 여러 부분에서 사용이 가능하다.
이번 버튼에서는 콜백으로 사용을 할것인데,
콜백 함수란 - 버튼에 함수를 미리 저장하고 누르면 바로 사용할 수 있도록 만드는것이라 보면 된다.


button.h에 private로 functional선언하고 public으로 이벤트 호출 함수 선언,정의

그러고 cpp로 update로 이동해 마우스 이벤트 발생하는 부분에 이벤트 넣어주고

TitleScene으로 이동하여 set함수를 바인드 이용해서 버튼에 넣어준다
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
이렇게 하고 실행하면 이제 Start를 누르면 게임이 실행되고 Exit를 누르면 게임이 나가지는 것을 확인 할 수 있다.
'WinAPI' 카테고리의 다른 글
| 다시 공부 하는 Win API (10) - UI - Inventory 제작(2) (0) | 2025.12.22 |
|---|---|
| 다시 공부 하는 Win API (9) - UI - Inventory 제작(1) (0) | 2025.12.12 |
| 다시 공부 하는 Win API (7) - Scene Management, 공간 분할 기법활용 (0) | 2025.12.09 |
| 다시 공부 하는 Win API (6) - 슈팅 게임 만들기(4) (0) | 2025.11.27 |
| 다시 공부 하는 Win API (5) - 슈팅 게임 만들기(3) (0) | 2025.11.25 |