728x90
MFC Keyboard & Message
Keyboard 방향키로 차일드 윈도우를 이동해보자
void CKeyMoveView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
// WM_KEYDOWN - 방향키로 차일드 윈도우 이동
{
// TODO: Add your message handler code here and/or call default
CPoint ptChild; //차일드 윈도우의 좌표.
CRect Rect; //차일드 윈도우의 좌표 및 크기.
//차일드 윈도우의 두 좌표 정보 (스크린 기준)를 알아 온다.
m_wndChild.GetWindowRect(&Rect);
ptChild.x = Rect.left;
ptChild.y = Rect.top;
//스크린 기준 좌표를 클라이언트 뷰 기준의 기준의 좌표로 환산한다.
ScreenToClient(&ptChild);
switch(nChar)
{
case VK_LEFT: // 왼쪽 화살표를 누른 경우
ptChild.x -= 10; // 10픽셀 만큼 x좌표 값 감소
break;
case VK_RIGHT: // 오른쪽 화살표를 누른 경우
ptChild.x += 10; // 10픽셀 만큼 x좌표 값 증가
break;
case VK_UP: // 왼쪽 화살표를 누른 경우
ptChild.y -= 10; // 10픽셀 만큼 y좌표 값 감소
break;
case VK_DOWN: // 오른쪽 화살표를 누른 경우
ptChild.y += 10; // 10픽셀 만큼 y좌표 값 증가
break;
}
//변경된 새 좌표로 차일드 윈도우를 이동 시킨다.
m_wndChild.SetWindowPos(&CWnd::wndTop, ptChild.x, ptChild.y, 0, 0,
SWP_SHOWWINDOW | SWP_NOZORDER | SWP_NOSIZE);
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Ctrl + Keyboard 방향키로 차일드 윈도우를 이동폭이 크게 해보자
void CKeyMoveView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
// WM_KEYDOWN - 방향키로 차일드 윈도우 이동
{
// TODO: Add your message handler code here and/or call default
CPoint ptChild; //차일드 윈도우의 좌표.
CRect Rect; //차일드 윈도우의 좌표 및 크기.
//차일드 윈도우의 두 좌표 정보 (스크린 기준)를 알아 온다.
m_wndChild.GetWindowRect(&Rect);
WORD ctrlResult = ::GetKeyState(VK_CONTROL);
BYTE ctrlHigh = HIBYTE(ctrlResult);
ptChild.x = Rect.left;
ptChild.y = Rect.top;
//스크린 기준 좌표를 클라이언트 뷰 기준의 기준의 좌표로 환산한다.
ScreenToClient(&ptChild);
if(ctrlResult ==0x11)
{
switch(nChar)
{
case VK_LEFT: // Ctrl + 왼쪽 화살표를 누른 경우
ptChild.x -= 100; // 100픽셀 만큼 x좌표 값 감소
break;
case VK_RIGHT: // Ctrl +오른쪽 화살표를 누른 경우
ptChild.x += 100; // 100픽셀 만큼 x좌표 값 증가
break;
case VK_UP: // Ctrl +왼쪽 화살표를 누른 경우
ptChild.y -= 100; // 100픽셀 만큼 y좌표 값 감소
break;
case VK_DOWN: // Ctrl +오른쪽 화살표를 누른 경우
ptChild.y += 100; // 100픽셀 만큼 y좌표 값 증가
break;
}
}
switch(nChar)
{
case VK_LEFT: // 왼쪽 화살표를 누른 경우
ptChild.x -= 10; // 10픽셀 만큼 x좌표 값 감소
break;
case VK_RIGHT: // 오른쪽 화살표를 누른 경우
ptChild.x += 10; // 10픽셀 만큼 x좌표 값 증가
break;
case VK_UP: // 왼쪽 화살표를 누른 경우
ptChild.y -= 10; // 10픽셀 만큼 y좌표 값 감소
break;
case VK_DOWN: // 오른쪽 화살표를 누른 경우
ptChild.y += 10; // 10픽셀 만큼 y좌표 값 증가
break;
}
//변경된 새 좌표로 차일드 윈도우를 이동 시킨다.
m_wndChild.SetWindowPos(&CWnd::wndTop, ptChild.x, ptChild.y, 0, 0,
SWP_SHOWWINDOW | SWP_NOZORDER | SWP_NOSIZE);
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
'컴퓨터과학[2-1] > knou_[2-1]Visual_C' 카테고리의 다른 글
MFC Keyboard 윈도우를 종료하는 네가지 방법 (0) | 2015.04.02 |
---|---|
MFC Keyboard 방향키로 차일드 윈도우의 크기를 조절해 보자 (0) | 2015.04.02 |
MFC Keyboard & Message (0) | 2015.04.01 |
MFC 코드의 흐름 (0) | 2015.03.30 |
MFC 윈도우 프로그래밍(최호성)101page 풀이 (0) | 2015.03.29 |
댓글