본문 바로가기
컴퓨터과학[2-1]/knou_[2-1]Visual_C

MFC Keyboard 방향키로 차일드 윈도우의 크기를 조절해 보자

by boolean 2015. 4. 2.
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);
}

댓글