- UI 기본 설계.
// CUI.h
...
class CUI : public CObject
{
private:
vector<CUI*> m_vecChildUI; // 자식 UI 포인터 벡터.
CUI* m_pParentUI; // 부모 UI 포인터.
Vector2 m_vFinalPos; // 최종 위치(부모 위치 + 본인 위치).
public:
virtual void update() override;
virtual void late_update() override;
virtual void render(HDC hDC) override;
public:
CLONE(CUI)
inline CUI* GetParentUI() const { return m_pParentUI; }
inline void AddChildUI(CUI* pChild) { m_vecChildUI.push_back(pChild); pChild->m_pParentUI = this; }
inline Vector2 GetFinalPos() const { return m_vFinalPos; }
private:
void update_child_ui();
void late_update_child_ui();
void render_child_ui(HDC hDC);
...
};
부모에 대한 포인터와 자식들을 vector 로 관리해줌.
렌더링할 때 최종 위치는 부모 위치 + 본인 위치로 계산.
// CUI.cpp
...
void CUI::update()
{
update_child_ui();
}
void CUI::late_update()
{
CObject::late_update();
// 부모 UI가 있을 경우, 부모 위치 + 본인 위치를 최종 위치로 설정.
m_vFinalPos = GetPos();
if(m_pParentUI)
{
m_vFinalPos += m_pParentUI->GetFinalPos();
}
late_update_child_ui();
}
void CUI::render(HDC hDC)
{
Vector2 size = GetSize();
Rectangle(hDC, static_cast<int>(m_vFinalPos.x), static_cast<int>(m_vFinalPos.y),
static_cast<int>(m_vFinalPos.x + size.x), static_cast<int>(m_vFinalPos.y + size.y));
render_child_ui(hDC);
}
void CUI::update_child_ui()
{
for(CUI* pChild : m_vecChildUI)
{
pChild->update();
}
}
void CUI::late_update_child_ui()
{
for(CUI* pChild : m_vecChildUI)
{
pChild->late_update();
}
}
void CUI::render_child_ui(HDC hDC)
{
for(CUI* pChild : m_vecChildUI)
{
pChild->render(hDC);
}
}
...
CUI::~CUI()
{
SafeDeleteVector(m_vecChildUI);
}
이제 씬에서 UI를 생성해보면
// CScene_Tool.cpp
...
void CScene_Tool::Enter()
{
...
// UI 오브젝트 생성
CUI* pUI = new CUI();
pUI->SetSize(Vector2(100.f, 30.f));
Vector2 vUISize = pUI->GetSize();
pUI->SetPos(Vector2(static_cast<float>(ptResolution.x) - vUISize.x, 0.f));
AddObject(pUI, GROUP_TYPE::UI);
// 자식 UI 오브젝트 생성
CUI* pChildUI = new CUI();
pChildUI->SetSize(Vector2(50.f, 15.f));
Vector2 vChildUISize = pChildUI->GetSize();
pChildUI->SetPos(Vector2((vUISize.x - vChildUISize.x) / 2.f, (vUISize.y - vChildUISize.y) / 2.f));
pUI->AddChildUI(pChildUI);
// 씬에 자식 UI 오브젝트 추가
AddObject(pChildUI, GROUP_TYPE::UI);
...
}

이렇게 부모 사각형 중앙에 자식 사각형이 그려지는 걸 확인.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 49 - 50화. (0) | 2025.09.25 |
|---|---|
| Win32 api 강의 48화. (0) | 2025.09.24 |
| Win32 api 강의 46화. (0) | 2025.09.24 |
| Win32 api 강의 44 - 45화. (0) | 2025.09.24 |
| Win32 api 강의 43화. (0) | 2025.09.23 |