UI, 특히 버튼의 경우 비슷한 동작을 하는 객체가 여러 개 생성된다.
객체지향의 활용과 다양성을 생각했을 때는 당연히 객체마다 하나의 클래스로 정의되어 사용하는 것이 바람직하다.
하지만 이 경우 자칫하면 너무 많은 클래스들이 남발될 수 있다.
때문에 버튼 UI의 경우에는 특별한 기능을 하나 추가해보려 한다.
바로 해당 버튼이 눌렸을 때 수행 되어야 할 기능을 미리 함수로 정해두고 함수 포인터를 사용해서 함수 포인터에 특정 함수의 주소가 들어있으면, 버튼 UI는 클릭시 그 함수를 실행해주기만 하도록 처리하는 것이다.
이렇게 하면 특별한 예외 상황을 제외하면 같은 클래스를 가지고 여러 기능을 수행하는 버튼을 만들 수 있게 된다.
완성된 UI를 사용할 때는 Level에서 해당 버튼이 눌렸을 때 수행되고 싶은 전역 함수 하나를 만든 뒤,
그 함수 주소를 넘겨주도록 해주면 된다.
// 함수를 함수 포인터에서 사용하기 위한 전방선언
void ChangeLevel(DWORD_PTR, DWORD_PTR);
void PlayLevel::LevelStart()
{
CBtnUI* pBtnUI = new CBtnUI;
.
.
.
pBtnUI->SetClickedCallBack(ChangeLevel-함수를 호출할 인자-);
}
void ChangeLevel(DWORD_PTR, DWORD_PTR)
{
EngineCore::ChangeScene("TitleLevel");
}