[MFC] Keyboard Message 처리
키보드의 방향키(LEFT,RIGHT,UP,DOWN)를 사용하여 마우스 커서의 위치 이동
1. WM_KEYDOWN에 대한 메시지 핸들러
2. 각 방향키에 따라 좌,우,위,아래방향으로 각각 10만큼 이동
3. 마우스 커서 관련 함수 - ::SetCursorPos(), ::GetCursorPos()
4. Shift를 누르면서 방향키를 누르면 더 많이 움직일 수 있게 작성
아래의 소스를 추가한다.
void CMessageView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CPoint pt;
if((::GetKeyState(VK_SHIFT)<0) &&(::GetCursorPos(&pt)))
{
switch(nChar)
{
case VK_LEFT: pt.x-=100;
::SetCursorPos(pt.x,pt.y);
break;
case VK_RIGHT: pt.x+=100;
::SetCursorPos(pt.x,pt.y);
break;
case VK_UP: pt.y-=100;
::SetCursorPos(pt.x,pt.y);
break;
case VK_DOWN: pt.y+=100;
::SetCursorPos(pt.x,pt.y);
break;
}
}
else if(::GetCursorPos(&pt))
{
switch(nChar)
{
case VK_LEFT: pt.x-=10;
::SetCursorPos(pt.x,pt.y);
break;
case VK_RIGHT: pt.x+=10;
::SetCursorPos(pt.x,pt.y);
break;
case VK_UP: pt.y-=10;
::SetCursorPos(pt.x,pt.y);
break;
case VK_DOWN: pt.y+=10;
::SetCursorPos(pt.x,pt.y);
break;
}
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
하지만 위의 소스는 길이가 길기 때문에, 효율성과 가독성이 떨어진다. 그래서 아래의 소스로 작성하면 효율성과 가독성이 더 증대된다.
void CMessageView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CPoint pt;
if(::GetCursorPos(&pt)) //else //(::GetCursorPos(&pt))
{
switch(nChar)
{
case VK_LEFT:
((GetKeyState(VK_SHIFT)) < 0) ? pt.x-=100 : pt.x-=10;
//shift키를 눌렀을 때 첫째 실행, 안눌었을 때 두번째 실행됨
::SetCursorPos(pt.x, pt.y);
break;
case VK_RIGHT:
((GetKeyState(VK_SHIFT)) < 0) ? pt.x+=100 : pt.x+=10;
::SetCursorPos(pt.x, pt.y);
break;
case VK_UP:
((GetKeyState(VK_SHIFT)) < 0) ? pt.y-=100 : pt.y-=10;
::SetCursorPos(pt.x,pt.y);
break;
case VK_DOWN:
((GetKeyState(VK_SHIFT)) < 0) ? pt.y+=100 : pt.y+=10;
::SetCursorPos(pt.x,pt.y);
break;
}
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
실행파일
'IT Note > 기타언어' 카테고리의 다른 글
[MFC] Text 출력 (0) | 2008.11.07 |
---|---|
[MFC] Mouse Message 처리 (0) | 2008.10.30 |
[MFC] Dialog based Program (0) | 2008.10.23 |