0x8000
Programming/MFC 2012. 2. 10. 16:23 |0x8000
10진수로 1000 0000 0000 0000
10진수로 1000 0000 0000 0000
책 실습과제에 "Ctrl 키와 방향키를 함께 눌렀을 때" 를 구현하래서 알아봄.
처음에는 CKeyMoveView::OnKeyDown에
case VK_LEFT : (왼쪽,오른쪽,위,아래 전부)
if(GetKeyState(VK_CONTROL) {
ptChild.x -= 50;
}
else {
ptChild.x -= 10;
}
break;
라고 하였으나 어쩐지 ctrl을 한 번 누르고 뗀 상태에서 해도 -50으로 적용되어
다른 방법이 있나? 다른데다가 코딩을 해야되나? 하다가 알게 된 것.
if 조건에
GetKeyState(VK_CONTROL) & 0x8000)
을 넣었더니 의도한 대로 컨트롤을 누르고 있는 상태에서 방향키를 누르면 많이, 떼면 조금만 움직인다.
그 이유는 GetKeyState(vk)를 호출하면 해당 키가 눌렸을 경우 최상위 비트가 1인 short형 값을 리턴한다.
0x8000은 1000 0000 0000 0000이고, & 연산자를 사용해 리턴값의 최상위 비트인 15가 1인지 0인지 알아낼 수 있다.
라고 함.
문제는 해결했지만, 이것저것 실험해봤는데 방향키를 누른 상태에서 컨트롤을 누르면 아무 동작도 안한다.
이걸 내가 의도한 대로 동작할 수 있게 하는 방법이 있을까 알아보아야겠음.
'Programming > MFC' 카테고리의 다른 글
CString를 char*로 바꾸기 (0) | 2012.04.25 |
---|---|
자식윈도우 Z-order 문제 (2) | 2012.03.30 |
VISUAL C++ 2008 MFC 윈도우 프로그래밍 247p 3번 (0) | 2012.02.16 |
RedrawWindow() (0) | 2012.02.13 |
OnPaint() (0) | 2012.02.13 |