WinAPI 53 UI (7)

CJB_ny·2022년 9월 30일
0

WinAPI

목록 보기
55/79
post-thumbnail

오늘 배운거 👍👍👍 ❗❗❗


버튼 구현

버튼 마다 해야하는 기능들이 다 다르다.

그래서 ButtonUI를 부모 클래스로 만들고 이들을 상속받는 Button클래스들을 만들어 보도록 하자.

=> 이유는 다형성 문제에서 클래스가 너무 많이 만들어 질 수 있기 때문이다.

그래서 부모 버튼 UI클래스는 함수 포인터를 가지고 있도록 하자.

함수 포인터 구현

함수 포인터를 정의를 해놓고

f_btnFunc라는 이름으로 함수 포인터를 멤버로 들고 있도록 하자.

그리고 버튼을 클릭했을 때의 Call해줄 함수를 구현을 해놓도록 하자.

이렇게 하면은 이제 SetClickedCallBack함수의 인자로 들어 오는 녀석은

BTN_FUNC 타입의 함수이여야 한다는 것이다.

BTN_TYPE의 함수의 모양은 DWORD_PTR인자를 두개를 받고 반환 타입이 void 인 함수이여야 한다는 것이다.

함수 포인터 내가 간과한 부분 ❗❗❗

지금 형태가 이런데 BTN_TYPE의 모양이 인자를 두개를 받기 때문에

이렇게 변경해주도록 하고

사용할 때는 ToolScene에서 buttonUI 만든 다음에 함수 전달해주고 인자로 들어갈 값 넣어주면은 된다.

버튼 클릭시 ToolScene -> StartScene 이동하고 싶다라고 하면은

일단 형태만 맞추기 위한 DWORD_PTR값 넣어주고 (임시변수 -> 바로삭제)

이렇게만 해주면 바로 씬이 다음 프레임에서 변경이 될 것이다.

안되었던 부분 ❗

현재 부모 클래스 UI에서 MouseLbtnClick 함수 virtual로 만들고 update에서 이벤트 체크 다 해주었는데

정작 같은 이름으로 buttonUI에서 override 하지 않아서 발생한 문제이다.

CameraManager 수정❗

이전에 내가 계속 여기서 에러가 나서 해당 부분에다가 이렇게 Vector2 0.00..1 값을 더했는데

이전에 보고 있던 카메라 좌표랑 현재 좌표랑 완벽하게 일치할 경우

이동방향이라는 게 존재 할 수 없다.

그래서 Vector2 함수 IsZero만들어 준다음에

이렇게 변경 해주도록 하자.

ToolScene Object 정리

현재 StartScene이랑 ToolScene왔다리 갔다리 거리면 계속 UI들이 복사가 일어남.

=> 복사가 아니라 그냥 Enter함수를 제대로 수행했을 뿐이다.

Exit에서 정리를 해주어야한다.

지금 이까지는 맞다. => 나도 코드 호출 흐름은 파악을 했음.

그런데 원인을 강사님처럼 찾지는 못할거같다.

이거 문제가 모든 오브젝트 싹다 삭제를 하는데 UI 포함.

날라간 UI를 Target으로 StartScene에서도 보고 있기 때문에 발생하는 문제이다.

그래서 이벤트를 ChangeScene으로 발생시켰을 때

다음 프레임이 수행되기 전에

여기서 nullptr로 밀어주도록 하자.

굿.

ButtonUI 둘 다 동작하는 부분.

clone한 ui에 대해서만 콜백함수를 등록해주고 싶다면은

내가 지금 구현이 어떻게 되어 있는지 알고 있기 때문에

120번째 줄 처럼 dynamic_cast를 통해 ButtonUI로 다운 캐스팅을 통해서 함수포인터를 연결해 줄 수 있다.

=> cloneUI만 버튼 클릭이 잘 동작한다.

굿.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글