GetAsyncKeyState()하면서 질문입니다.

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
psj5500
Posts: 48
Joined: 2003-09-16 19:35

GetAsyncKeyState()하면서 질문입니다.

Post by psj5500 »

안녕하세요...여전히 극악초보입니다..



게임화면에서 간단히 테스트 할려고 GetAsynckeyState() api를 사용할려고 하는데요...



궁금한 것이 있어서 질문드립니다.

첫번째



#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)

#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)



요렇게 하는 방법(아마도 감자넷에서 보고) 을 인터넷에서 보고 따라해 봤습니다.

여기서 & 0x8000의 의미를 모르겠습니다...이게 뭘 의미하는건지..



그리구요..두번째로

vk_code에서 0x50이런식으로 16진수로 하면 키가 먹히는데요..

VK_W 이런식으로...MSDN에 있는 심볼로 하니 알수없는 연산자라는 에러가 납니다.

헤더파일에..Winuser.h도 추가해 보고 , kbdui.lib도 추가해 봤는데도 안되네요..



고수님들의 답변 부탁드립니다...
초보 탈출~
Xine
Posts: 253
Joined: 2002-08-12 00:37

Re: GetAsyncKeyState()하면서 질문입니다.

Post by Xine »

psj5500 wrote:여기서 & 0x8000의 의미를 모르겠습니다...이게 뭘 의미하는건지..
해당 key가 바로 이전의 GetAsyncKeyState호출에서 눌러지지 않았지만 이번 호출에서 눌러졌다면
0x8000 플래그가 켜져서 리턴됩니다. 그리고 그 키를 계속 누르고있는 동안 켜지지 않습니다.
보통 한번의 키누름에서 하나의 동작을 할때 유용하죠.
(말그대로 비동기(async)적이기 때문에 키를 아무리 순식간에 눌러도 프로그램의 루프가 빠른만큼
계속 눌러진 걸로 감지되기 때문에...)

psj5500 wrote:VK_W 이런식으로...MSDN에 있는 심볼로 하니 알수없는 연산자라는 에러가 납니다.
GetAsyncKeyState( 'W' ); 로 직접 넣으시면 됩니다(대문자).
이덕희
psj5500
Posts: 48
Joined: 2003-09-16 19:35

앗~ 감사합니다..

Post by psj5500 »

답변 감사합니다...
초보 탈출~
비회원

.....

Post by 비회원 »

0x8000 은 현재 키가 눌리면 세팅되고 안눌리면 세팅이 안되는 것으로

한번만 눌렀는지를 확인하기는 불가능 한것 같은데요.

제가 잘못알고 있는것인지요?
Xine
Posts: 253
Joined: 2002-08-12 00:37

Re: .....

Post by Xine »

비회원 wrote:0x8000 은 현재 키가 눌리면 세팅되고 안눌리면 세팅이 안되는 것으로

한번만 눌렀는지를 확인하기는 불가능 한것 같은데요.
한번만 눌렀는지 확인을 한다기보다, _이번에_ 눌렸는지 검사한다는 의미였습니다 :wink:
한번눌러지고서 다시 up되지 않으면 다음번 GetAsyncKeyState검사에서는
0x8000 플래그는 켜져있지 않죠.
이덕희
Xine
Posts: 253
Joined: 2002-08-12 00:37

죄송합니다. 오류...

Post by Xine »

제가 여지껏 0x8000 플래그라고 말한 것은 전부 0x0001 입니다.
잘못된 정보를 답변이라고 달아서 죄송합니다 :oops:
0x8000 은 비회원님 말씀처럼 눌러지고 있는동안 계속 켜저 있습니다.
이덕희
비회원

새로운 사실을 알았습니다.

Post by 비회원 »

저도 저위에 0x8000 으로만 그냥 검사하면서 과연 리턴값에 어떤의미가 있는건지
한번도 생각안해봤었는데

리턴값에 많은 정보가 들어와 있었군요.

그 리턴값에 어떤 정보가 들어있는지 어떻게 알수있죠?

MSDN에는 안나오는것 같던데요.
이런 정보를 어디서 알아내셨나요? 좀 알려주십시요. 부탁.
Xine
Posts: 253
Joined: 2002-08-12 00:37

MSDN에

Post by Xine »

비회원 wrote:MSDN에는 안나오는것 같던데요.
이런 정보를 어디서 알아내셨나요? 좀 알려주십시요. 부탁.
MSDN에 나와있구요, 0x8000, 0x0001 이런식으로 나온 것이 아니라
최상위비트, 최하위비트 라고 적어놔서 못보신듯 하네요 8)
MSDN wrote:If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.
이덕희
Locked