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; //차일드 윈도우의 좌표 및 크기.
CSize sizeChild; //차일드 윈도우 크기 조절
WORD ctrlResult = ::GetKeyState(VK_CONTROL);
BYTE ctrlHigh = HIBYTE(ctrlResult);
//차일드 윈도우의 두 좌표 정보 (스크린 기준)를 알아 온다.
m_wndChild.GetWindowRect(&Rect);
ptChild.x = Rect.left;
ptChild.y = Rect.top;
sizeChild.cx = Rect.right - Rect.left; //차일드 윈도우 Width
sizeChild.cy = Rect.bottom - Rect.top; //차일드 윈도우 Height
//스크린 기준 좌표를 클라이언트 뷰 기준의 기준의 좌표로 환산한다.
ScreenToClient(&ptChild);
if(ctrlHigh & 0x01)
{
switch(nChar)
{
case VK_LEFT: // Ctrl + 왼쪽 화살표를 누른 경우
sizeChild.cx -= 100; // 100픽셀 만큼 x좌표 값 감소
break;
case VK_RIGHT: // Ctrl + 오른쪽 화살표를 누른 경우
sizeChild.cx += 100; // 100픽셀 만큼 x좌표 값 증가
break;
case VK_UP: // Ctrl + 왼쪽 화살표를 누른 경우
sizeChild.cy -= 100; // 100픽셀 만큼 x좌표 값 감소
break;
case VK_DOWN: // Ctrl + 오른쪽 화살표를 누른 경우
sizeChild.cy += 100; // 100픽셀 만큼 x좌표 값 증가
break;
}
}
switch(nChar)
{
case VK_LEFT: // 왼쪽 화살표를 누른 경우
sizeChild.cx -= 10; // 10픽셀 만큼 x좌표 값 감소
break;
case VK_RIGHT: // 오른쪽 화살표를 누른 경우
sizeChild.cx += 10; // 10픽셀 만큼 x좌표 값 증가
break;
case VK_UP: // 왼쪽 화살표를 누른 경우
sizeChild.cy -= 10; // 10픽셀 만큼 x좌표 값 감소
break;
case VK_DOWN: // 오른쪽 화살표를 누른 경우
sizeChild.cy += 10; // 10픽셀 만큼 x좌표 값 증가
break;
}
//변경된 새 좌표로 차일드 윈도우를 이동 시킨다.
m_wndChild.SetWindowPos(&CWnd::wndTop, 0, 0, sizeChild.cx,sizeChild.cy,
SWP_SHOWWINDOW | SWP_NOZORDER | SWP_NOMOVE);
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
'컴퓨터과학[2-1] > knou_[2-1]Visual_C' 카테고리의 다른 글
MFC Mouse [WM_MOUSEMOVE, WM_PAINT]마우스 좌표 출력하기 (0) | 2015.04.06 |
---|---|
MFC Keyboard 윈도우를 종료하는 네가지 방법 (0) | 2015.04.02 |
MFC Keyboard 방향키로 차일드 윈도우를 이동해보자 (0) | 2015.04.02 |
MFC Keyboard & Message (0) | 2015.04.01 |
MFC 코드의 흐름 (0) | 2015.03.30 |
댓글