자식 UI 추가

2023. 1. 5. 18:58개인공부/Win32API

 

자식 UI쪽에서 클릭을 입력받으면 자식 UI 의 테두리 색깔이 변하게 설계를 했다. 그리고 간단하게 문자열을 WIN32에서 출력하는 방법을 썻다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
void CUIMgr::update()
{
    CScene* pCurScene = CSceneMgr::GetInst()->GetCurScene();
    const vector<CObject*>& vecUI = pCurScene->GetGroupObject(GROUP_TYPE::UI);
 
    bool bLbtnTap = KEY_TAP(KEY::LBTN);
    bool bLbtmAway = KEY_AWAY(KEY::LBTN);
 
    for (size_t i = 0; i < vecUI.size(); ++i)
    {
        CUI* pUI = (CUI*)vecUI[i];
 
        pUI = GetTargetedUI(pUI);
 
        if (nullptr != pUI)
        {
            pUI->MouseOn();
 
            if (bLbtnTap)
            {
                pUI->MouseLbtnDown();
                pUI->m_bLbtnDown = true;
            }
            else if (bLbtmAway)
            {
                pUI->MouseLbtnUp();
 
                if (pUI->m_bLbtnDown)
                {
                    pUI->MouseLbtnClicked();
                }
 
                // 왼쪽버튼 떼면 ,눌렸던 체크를 다시 해제한다.
                pUI->m_bLbtnDown = false;
            }
        }
 
    }
}
 
CUI* CUIMgr::GetTargetedUI(CUI* _pParentUI)
{
 
    bool bLbtmAway = KEY_AWAY(KEY::LBTN);
 
 
    // 1. 부모 UI 포함, 자식 UI 들중 실제 타겟팅 된 UI를 가져온다.
    CUI* pTargetUI = nullptr;
 
    static list<CUI*> queue;
    static vector<CUI*> vecNoneTarget;
 
    queue.clear();
    vecNoneTarget.clear();
 
    queue.push_back(_pParentUI);
 
    while (!queue.empty())
    {
        // 큐에서 데이터 하나 꺼내기
        CUI* pUI = queue.front();
        queue.pop_front();
 
        // 큐에서 꺼내온 UI가 TargetUI 인지 확인
        // 2. 타겟 UI 들 중, 더 우선순위가 높은 기준은 더 낮을 계층의 자식 UI
 
        if (pUI->IsMouseOn())
        {
            if (nullptr != pTargetUI)
            {
                vecNoneTarget.push_back(pTargetUI);
            }
            pTargetUI = pUI;
        }
        else
        {
            vecNoneTarget.push_back(pUI);
        }
 
        const vector<CUI*>& vecChild = pUI->GetChildUI();
        for (size_t i = 0; i < vecChild.size(); ++i)
        {
            queue.push_back(vecChild[i]);
        }
    }
    // 왼쪽버튼 뗴면, 눌렸던 체크를 다시 해제한다.
    if (bLbtmAway)
    {
        for (size_t i = 0; i < vecNoneTarget.size(); ++i)
        {
            vecNoneTarget[i]->m_bLbtnDown = false;
        }
 
    }
        return pTargetUI;
}
 
cs

어제 공부했던 구조를 수정해서 자식UI쪽에서도 마우스 입력을 받기 가능하게 설계를 하였다. 내일은 UI가 1개가 아니므로 2개이상의 UI를 관리가능한 방향으로 설계를 다시할 예정이다.

'개인공부 > Win32API' 카테고리의 다른 글

파일 입출력  (0) 2023.01.08
UI 기능  (0) 2023.01.06
UI Manager  (0) 2023.01.04
Camera  (0) 2023.01.03
Animation- Component  (0) 2023.01.02