WinAPI 22 Path Manager

CJB_ny·2022년 9월 5일
0

WinAPI

목록 보기
21/79
post-thumbnail

Path Manager

이게 이미지임.

Load함수 호출을 하면 이제

path에 해당하는 이미지를 메모리상에 올리고 올라간 것을 bitMap id로 가르켜야한다.

가르킨다는 것은 포인터가 아니라 윈도우에서 제공하는 커널 오브젝트이기 때문에

id를 받아와서 오브젝트의 id를 알게 되는 것이다.

그리고 오브젝트의 id를 얻어와서 이녀석과 연결지어줄 dc를 들고와서 둘이 연결지어주고

Texture가 멤버로 dc를 들고있기 때문에 멤버 dc가 오브젝트의 dc를 알고 있으면 된다.

정리하자면

로딩된 오브젝트의 비트맵과 dc를 Texture라는 녀석이 알고있게 하기 위해서
HDC _dc, BITMAP _bitMap 이렇게 멤버를 두가지를 가지고 있는 것이다.

이렇게되면이제 Texture객체를 지정할 때 이미지(로드된 이미지(오브젝트))와 동일시 하게 될 것이다.

그리고 윈도우 LoadImage함수 사용한다.

type은 이미지를 Load할 때 옵션값을 넣어 달라는 의미 이다.

이거 비트연산자로 조합을 해서 가져올 수 있게 해놓았다.

로딩할 때 추가적인 옵션사항들을 넣는 부분이다.

우리는 이 두가지를 조합을 해서 사용을 할 것이다. (이거 두개가 가장 기본이다)

이 따위로 해주고 그다음 이미지 가로 세로 픽셀정하는데 뭘 올릴지 정하지도 않았는데

어케 정함?

IMAGE_BITMAP식으로 로드를 할 것이고 사이즈를 0,0으로 로드하면 전체 로드함.

로드 옵션을 마지막에 넣어준다.

얘는 지금 완성된 경로 이기 때문에 폴더를 어디다가 넣으면 절대 경로가 바뀐다.

그래서 경로를 관리를 해줄 필요성이 생김 => PathManager 필요성

PathManager

디버그 모드로 빌드함.

그래서 최종적으로 원하는 것은 Debug폴더안에 exe 실행 파일이다.

프로젝트 구조 설계

현재 이게 내가 작업하는 '솔루션'인데

왼쪽에 Client라는 프로젝트를 빌드를 했을 때 만들어지는 '실행 파일' 이름을 바꾸어 볼 것이다.

해당 프로젝트 속성 -> 일반

-> 출력 디렉토리

Configuration이 구성이고 저러저러한 이름으로 실행파일 만든다니까

64비트 버젼의 디버그 모드로 실행파일이 나온 것이다.

우리가 배포할 버젼은 bin폴더 이다.

이경로 까지는 항상 찾아내야한다.

뭐 대충 이까지 만들어주고 이제 윈도우 함수를 사용할 것이다.

프로그램이 실행하게 되면은 해당 프로그램을 기준으로 '위치'를 현재 디렉토리라고 기억을 하고있다.

그래서 우리 실행 프로그램을 실행하게 되면은 현재 프로그램의 위치.

그 위치를 현재 디렉토리라고 내부적으로 저장을 하고있다.

.exe파일 실행하게되면 밑줄 그은 저 디렉토리가 나온다는 것이다.

현재는 디버그 모드일때랑 릴리즈 일때랑 경로가 다르게 나올 것인데

우리는 항상

이 경로를 알아 내야한다.

그래서 둘다 그냥 상위폴더로 한번 나간다음에 bin폴더 들어오도록 만들자.

경로 생성

경로를 문자열로 받을 것인데 윈도우에서 경로는 255글자로 제한을 해놓음.

현재 경로

이게 지금 디버그 버젼 현재 경로이다.

이렇게 뜬다.

근데 문제가 하나가 있다.

  • 컨트롤 + F5 : 디버그 모드를 사용하지 않고, 그냥 비주얼 스튜디오 상으로 프로그램을 실행시켜 본 것이다.

  • 그냥 F5 : 디버깅 모드로 실행한다는 것은 각종 중단점이랑 이런저런거 살펴볼 수 있다.

이거 둘다 같은 경로가 뜨는데 경로를 다시 보자면은

이런상황인데

우리가 평소에 사용하는 이 디버깅 모드로 실행을 하게 되면은

bin폴더에 있는 실행파일이 자체적으로 실행된게 아니라

vs가 먼저 실행이 되었고 거기에서 vs를 통해서 디버그모드로 다시 실행된 것이다.

그래서 이떄 현재 directory를 어디를 잡아주냐?

=> 현재 프로젝트 위치를 잡아준다.

그런데 bin안에 있는 리소스에 접근을 하기 위햐수 테스트를 해야하는데

지금 테스트를 할때 리소스에 접근을 못한다 (디버깅 모드로 실행을 하면은)

그래서 디버그 모드로 실행할 경우, 디버그 실행파일 실행할 경우, 릴리즈 실행파일 실행할 경우

다 똑같은 경로를 찾도록 해야한다.

그래서 이런 부분을 프로젝트 -> 속성 가면 잡아준다.

속성

디버깅 -> 작업 디렉토리 이게 current 디렉토리를 말한다.

이거 모든 구성으로 바꾸고 경로 이렇게 바꿔준다.

그리고 다시 실행하면 잘된다.

현재 경로가 나온다 이제는.

이까지 더해주면 접근이 가능함.

문자열 접근 ❗❗❗

  • wsclen

  • wcscat_s

이런경로가 있을 경우

지금 \ 만났을 떄 여기가 끝이라고 말하고싶은 것이다.

그렇다면 '\0' null문자로 바꾸어 주어야한다.

이렇게해주면 가다가 '\0' 만나서 문자열이 끊겼다고 인식을 한다.

이런식으로 다 '\0'으로 밀어줄 필요는 없다.

wsclen함수사용해서 문자열 길이 얻어오고

반복문을 뒤에서 부터 돌 것인데 배열의 인덱스부터 접근을 하기 때문에

하나 빼주어야 한다.

뒤에 안지웠지만 이까지로 인식을 한다.

붙여준다.

굿굿

나는 이제 '상대경로' 사용할 준비가 됬다.

이경로 수정못하게 const 포인터로 준다.

delete

StartScene에서 이렇게 Load를 해서 상대경로 넣어주면 이제 texture라는 녀석이

로드된 이미지를 가르킨다.

그리고 30번째 줄에서 다 사용하고나면 delete해주는데

Texture클래스 소멸자 부분에서

다 사용을 했으니 이렇게 DeleteDC, DeleteObjerct로 커널 오브젝트를 삭제를 해주도록 한다.

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

0개의 댓글