WinAPI 50 UI (4)

CJB_ny·2022년 9월 28일
0

WinAPI

목록 보기
51/79
post-thumbnail

오늘 배운거 👍👍👍


UI (4) 강의에서 말했던 문제점이 있기 때문에

targetUI 인 상태에서 눌렀다가 밖에서 마우스를 때는 경우...

그래서 타겟팅이 안된 녀석들은 벡터로 관리를 할 것이다.

타겟이 while문 안에서 변경될 수도 있다.

87번째의 else문으로 빠졌다! 라는 것은 지금 마우스가 올라가있지 않은 상태 =>

즉, 타겟팅이 되어있지 않다라는 말이라서 vecNoneTargetUI에다가 데이터를 집어넣어 주도록 하자..

그리고 이제

마우스의btn이 away일 때의 기준으로 for문을 돌면서 타겟팅이 안된애들의 버튼을 false로 되돌려 놓아 주도록 하자.

벡터, 리스트 메모리 비용

현재 이 두녀석은 지역변수이다 보니까 매번 함수호출 할 때마다

지역변수 객체 생성 시키고...이러는데 이거 매번 사용하니까

'정적멤버'변수로 두는게 나을거 같다.

그래서 GetTargetUI함수만의 정적 멤버 변수로 만들어 주도록 하자.

이렇게되면은 데이터 영역에 올라가게 되어서 프로그램 종료할 때까지 계속 남아있고

호출할 때마다 각각 clear한번씩 호출 한다음에 사용하도록 설계하자.

vector, list 간과하면 안되는 점 ❗❗❗

vector의 경우에는 clear 호출 하면은 안에있던 데이터(값)는 없어지지만,

vector에 할당된 메모리는 삭제되지 않는다.

clear호출한 후에도 capacity는 그대로 남아있는 것을 확인이 가능하다.

list의 경우에는 당연하게도 동적할당 해서 노드랑 노드를 연결하다보니

clear하면 싹다 날라간다.

이 설명하는 부분들은 vector, list의 구조 원리를 알고 있으면 당연하게 받아 들일 것이다.


이까지 UIManager의 GetTargetUI랑 update를 구현한다음에

시각적으로 이게 잘 클릭이 되는지 확인을 하는 작업을 할 것이다.

lbtnDown일 경우 일단 다 잘 된다.

문제 ❗

클릭하는 부분에서 부모쪽의 lbtndown이 false로 인식이 되어서 클릭이벤트 호출이 안되었었는데

이부분이 이렇게 되어있었는데

큐에서 다른 녀석을 끄집어 왔는데 그 녀석이 IsMouseOn이 발생했다는 것은

타겟이 변경되었다라는 것이니까

IsMouseOn일 경우 타겟UI를 바꿔 주어야한다 ❗

부모 UI클릭했을 때 이벤트 잘 전달 된다.

지금 하나의 부모 UI내에서만 타겟팅을 찾고 _lbtnDown인지 아닌지를 파악할 수 있게 했는데

같은 레벨의 부모 UI들 사이에서도 포커싱 기능과 타겟 기능을 만들어야한다.

그러면 이제 전체적인 구조가 바뀔 꺼라서 지금 설계 구조를 파악을 하고 넘어가야한다.

본인만의 UI를 만들어보고 구조를 파악하기를 바란다.

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

0개의 댓글