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); }