WinAPI 기본 (2)

CJB_ny·2022년 8월 22일
0

WinAPI

목록 보기
2/79
post-thumbnail

단축키 테이블 정보 로딩

hAccelTable

while

여기서 중요한게 GetMessage, TranslateMessage, DispatchMessage이다.

GetMessage

프로세스 안에 '메세지 큐'라는게 있다.

스택은 마지막에 넣은게 제일 먼저 나오고

큐 같은 경우에는 먼저 넣어준 데이터가 먼저 나옴.

메세지 큐란?

내가 실행시킨 프로그램은 하나의 프로세스 이지만

OS는 모든 프로세스들을 다 관리하고있다.

그러면 윈도우에서 발생할 수 있는

'예상 범위'이내에있는 모든 '이벤트'들을 정의 해놓은 것이다.

그래서 그런게 발생했을 경우에

메세지큐에 그런 메세지들이 쌓여가는데

수많은 프로세스들 중에서도 현재 포커싱중인 프로세스가 있을 것이다.

예를들어 지금 그림판을 막 움직이면 포커싱중인 프로세스는 그림판인데

발생한 메세지들을 메세지에 큐에 있는 메세지들을

그림판 프로세스쪽으로 메세지들을 넣어준다.

그러면 해당 프로세스가 들어온 순서대로 메세지들을 처리를 한다.

그림판 예

'그 지점에 색을 칠한다' 라는게 그림판에 구현이 되어있을 것이다.

'마우스 클릭'이 발생을 하면

그림판의 '메세지 큐'에 '마우스 클릭'이

이렇게 들어오고 그것을

이렇게 꺼내서, 현재 마우스 위치에

색상을 칠해야겠다라는 '작업 처리'를 한다는 것이다.

근데 이 그림판이라는 프로세스에 포커싱이 되어있지 않다면

현재 포커싱 되어있지 않아 비주얼 뒤로 사라졌는데

이상태에서 마우스를 드래그 한다고해서 그림판에 색이 칠해지지 않는다.

GetMesseage

이 함수는 뭐냐 하면은 해당 프로그램쪽으로 발생한

메세지들을 '메세지 큐'에 받아놨을 텐데

그것을 꺼내 본 것이다.

주소값을 붙여준 이유는

GetMessage 안에서는 발생한 메세지 큐에서 메세지를 꺼내서

msg에 넣어줄 것이다.

그래서 &msg로 넘겨준 것이다.

그 받아온 메세지를

이 두함수를 이용해서 '처리'를 해준 것이다.

그런데

msg의

.hwnd가 뭐냐하면은 이 메세지가 발생한 윈도우를 말한다.

하나의 프로세스 안에서도 창을 여러개만들 수 있기때문에

구체적으로 발생한 윈도우를 말함.

그렇게되면 메세지가 발생한 윈도우 쪽에 '프로시저' 함수가 호출이 된다.

그래서 이

내부에서는 프로시저 함수를 다 처리하도록 되어있다.

(54~55 함수)

GetMessage 중요한 특징.

메세지 큐에서 메세지 확인할때까지 대기

언제 true, false를 반환하는지 의미가 있다.

false를 반환을 하면 while문이 실패 => 프로그램 종료

언제 getmessage가 false를 반환하는지 이헤 ㄱㄱ.

GetMessage의 반환값이 T / F 는 어떤 메세지였냐에 따라서

T / F 가 나온다.

msg.message == WM_QUIT 인경우 false를 반환 => Program 종료.

WM_QUIT 발생한다는 것이 안정적으로 종료됬다는 것임.

WM_QUIT가 발생하기 전에 윈도우가 먼저 다 꺼지는 메세지가 발생을 한다고.

프로그램이 메세지 반응형으로 구현되어있다.

그래서 이런 메세지 반응형으로는

클라게임 만들기에는 부적합 하다.

메세지 큐 방식으로 게임을 만들 수 있기는 한데

비효율적이고 문제가 있다.

이런 기본구조를 고쳐서 게임을 만드는데 적합한 구조로 바꾸고

게임을 만들 것이다.

WndProc 함수

이 switch문 안에서의

WM_PAINT 알아볼 것인데

  • 윈도우 핸들

  • 윈도우 좌표

  • hdc

를 알아볼 것이다.

WM_PAINT가 발생했을 때 요런걸 하겠다라고 일단 해보자.

윈도우 좌표

작업 영역이 있고 빨간색 박스 좌상단이 (0, 0)

1씩증가할때의 단위가 뭐냐하면은 '픽셀'이다.

이게 해상도랑도 관련있다.

미술의 '모자이크 기법'

나는 지금

1920 1080이다.

4K의 경우 1920 1080의 4배이다.

픽셀 갯수가 1920 * 1080이다.

절대적인 화면 크기가 같은데

하나는 FHD이고 하나는 4K라고하면

같은 공간에 4배나 더 많은 픽셀이 들어간거니까 기술이 좋은거임.

화면을 잔뜩 크게 해놓고 4k라고하면 ㅂ신이다.

픽셀 하나하나가 메모리노.

그래서

여기서 1단위가 픽셀단위 이다.

왼쪽이 10, 10 오른쪽 아래점이 110, 110

이 사각형의 크기는 픽셀이 100 by 100이다.

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

0개의 댓글