void CScreenEditView::OnMouseMove(UINT nFlags, CPoint point)
{
	CFEManDoc* pDoc = GetDocument();
	Screen *pWorkScreen;

	// Only draw the screen object if there is one screen selected.
	if(pDoc->GetNumSelectedScreenIcons() != 1)
		return;

	CPoint gridPoint, tempPoint;
	unsigned long xRes, yRes;

	if(pDoc->gridActive)
	{
		tempPoint.x = point.x - DEFAULT_SCREEN_OFFSET_X;
		tempPoint.y = point.y - DEFAULT_SCREEN_OFFSET_Y;

		xRes = tempPoint.x / pDoc->gridSpacing;
		yRes = tempPoint.y / pDoc->gridSpacing;

		gridPoint.x = pDoc->gridSpacing * xRes;
		gridPoint.y = pDoc->gridSpacing * yRes;

		gridPoint.x += DEFAULT_SCREEN_OFFSET_X;
		gridPoint.y += DEFAULT_SCREEN_OFFSET_Y;
	}
	else
	{
		gridPoint = point;
	}

	pWorkScreen = pDoc->GetFirstSelectedScreen();
	
	switch(lButtonStatus)
	{
	case LBS_NORMAL:		// Nothing special.
		// Nothing to do with the left button.
		ChooseMouseCursor(&point);
		break;

	case LBS_WINDOWCLICK:	// Clicked on a window.
		// Track the selection window.

		// Update the current selection rectangle to stretch from the last left click
		// position to the current mouse position.

		selectionWindow.right = point.x;
		selectionWindow.bottom = point.y;

		// Let the document select all the screens within this rect.
		pWorkScreen->SelectScreenObjectsInRect(&selectionWindow);

		// Make sure we redraw this box.
		Invalidate();
		break;
	
	case LBS_SCREENOBJECTCLICK:	// Clicked on a screen object.
		// Move all selected objects.
		
		if(pDoc->gridActive)
		{
			pWorkScreen->SetExplicitScreensObjectPosition(&gridPoint);
		}
		else
		{
			pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &gridPoint);
		}

		// Make sure we only move the difference.
		lastLeftClick = gridPoint; // I'm cheating.  So sue me.  I'm fired.

		Invalidate();
		break;

	case LBS_IN_GIZMO_TOP_LEFT:
	case LBS_IN_GIZMO_TOP_MIDDLE:
	case LBS_IN_GIZMO_TOP_RIGHT:
	case LBS_IN_GIZMO_MIDDLE_LEFT:
	case LBS_IN_GIZMO_MIDDLE_RIGHT:
	case LBS_IN_GIZMO_BOTTOM_LEFT:
	case LBS_IN_GIZMO_BOTTOM_MIDDLE:
	case LBS_IN_GIZMO_BOTTOM_RIGHT:
		// Only get these if only one screen object selected.
		ScreenObject *so = (ScreenObject *)pWorkScreen->GetFirstSelectedScreenObject();

		so->Resize(&lastLeftClick, &gridPoint, lButtonStatus);

		// Make sure we only move the difference.
		lastLeftClick = gridPoint; // I'm cheating.  So sue me.  I'm fired.

		Invalidate();
		break;
	}
}
void CScreenEditView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	CFEManDoc* pDoc = GetDocument();
	CPoint workPoint = lastLeftClick;
	unsigned long moveDist = 0;
	Screen *pWorkScreen;
	ScreenObject *pWorkObject;

	// Only draw the screen object if there is one screen selected.
	if(pDoc->GetNumSelectedScreenIcons() != 1)
		return;

	pWorkScreen = pDoc->GetFirstSelectedScreen();
	
	if(pDoc->gridActive)
	{
		moveDist = pDoc->gridSpacing;
	}
	else
	{
		moveDist = 1;
	}

	switch(nChar)
	{
	case VK_LEFT:
		workPoint.x -= moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_RIGHT:
		workPoint.x += moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_UP:
		workPoint.y -= moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_DOWN:
		workPoint.y += moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_TAB:
		pWorkObject = pWorkScreen->GetFirstSelectedScreenObject();

		if(pWorkObject)
		{
			pWorkObject = pWorkScreen->GetFirstSelectedScreenObject();

			pWorkObject = (ScreenObject *)pWorkObject->GetNext();

			pWorkScreen->ClearAllSelectedScreenObjects();

			if(pWorkObject)
			{
				pWorkScreen->SelectScreenObject(pWorkObject);
			}
			else
			{
				pWorkScreen->SelectScreenObject(pWorkScreen->GetFirstScreenObject());
			}
		}
		else
		{
			pWorkScreen->SelectScreenObject(pWorkScreen->GetFirstScreenObject());
		}
		break;
	}

	Invalidate();

	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}