bdfgdfg

PeekMessage와 GetMessage, 키입력 본문

게임프로그래밍/Win32 API

PeekMessage와 GetMessage, 키입력

marmelo12 2021. 9. 22. 13:45
반응형

PeekMessage와 GetMessage의 차이점

GetMessage는 메시지가 없으면 메시지가 올때까지 무한정 기다린다.

게임에서는 메시지처리가 따로없더라도 게임이 돌아가야하기 때문에 GetMessage를 사용하는것은 좋지않다.

 

PeekMessage는 메시지가 있으면 true를 없다면 false를 매번 리턴한다. (물론 인자로 메시지의 주소를 전달하는것은 같다. 메시지가 존재한다면 msg구조체에 메시지를 저장)

// 기본 메시지 루프입니다:
while (loop)
{
    if (PeekMessage(&msg,nullptr,0,0,PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    else // 윈도우 idle타임.
    {

    }
}

이런식으로 winapi를 통해 게임을 만들경우 코드를 작성한다. 사용자가 종료를 할 때, WndProc 함수의 종료되는 케이스에서 loop를 false로 만들어준다. -> 혹은 PeekMessage안의 if문에서 메시지가 WM_QUIT이라면 break.

키입력

GetAsyncKeyState함수를 이용한다.

리턴값이 16진수 

0x0000 - 이전에 누른적이없고 호출 시점에도 눌려있지 않은 상태

0x0001 - 이전에 누른 적이 있고 호출 시점에는 눌려있지 않은 상태

0x8000 - 이전에 누른 적이 없고 호출 시점에는 눌려있는 상태

0x8001 - 이전에 누른 적이 있고 호출 시점에도 눌려 있는 상태

 

보통 GetAsyncKeyState('D') & 0x8000과 같이 리턴값을 AND연산해 트루일 경우 키입력처리를 한다.

 

반응형

'게임프로그래밍 > Win32 API' 카테고리의 다른 글

키보드와 마우스  (0) 2021.09.26
WinAPI 그래픽  (0) 2021.09.25
Winapi 구조 - 2  (0) 2021.09.25
Win32 API 구조 - 1  (0) 2021.09.13
Win32 API 프로그래밍  (0) 2021.09.12
Comments