I'm making a program that let me click on the center of two concentric circles and, by mouse move, change it's position and i can do the same with it's radii. The thing is that the mouse movement is followed by a delay response from the circles drawing making the radius follow the mouse instead of being exactly in the same position during the movement.
Would you guys know how to make it work like that? pin point following by the drawing.
a bit of the code that treats the mouse clicking and movements:
void DemoApp::OnLButtonDown(FLOAT pixelX, FLOAT pixelY) { SetCapture(m_hwnd); mouseRegion = DPIScale::PixelsToDips(pixelX, pixelY); FLOAT xDifference = centerCircles.x - mouseRegion.x; FLOAT yDifference = centerCircles.y - mouseRegion.y; FLOAT distanceToCenter = sqrtf(xDifference*xDifference + yDifference*yDifference); if(distanceToCenter < 10.0f) { centerMove = true; minimumRadiusCircleMove = false; maximumRadiusCircleMove = false; } else if((distanceToCenter > (minimumRadius - 1.0f)) && (distanceToCenter < (minimumRadius + 1.0f))) { minimumRadiusCircleMove = true; centerMove = false; maximumRadiusCircleMove = false; } else if((distanceToCenter > (maximumRadius - 1.0f)) && (distanceToCenter < (maximumRadius + 1.0f))) { maximumRadiusCircleMove = true; centerMove = false; minimumRadiusCircleMove = false; } else { centerMove = false; minimumRadiusCircleMove = false; maximumRadiusCircleMove = false; } InvalidateRect(m_hwnd, NULL, FALSE); } void DemoApp::OnMouseMove(int pixelX, int pixelY, DWORD flags) { if (flags & MK_LBUTTON) { if(centerMove) { centerCircles = DPIScale::PixelsToDips(pixelX, pixelY); FLOAT distanceLeftToCenterCircles = abs(centerCircles.x - bitmapTopLeft); FLOAT distanceTopToCenterCircles = abs(centerCircles.y - bitmapTopRight); percentageFromLeft = distanceLeftToCenterCircles / displaySizeWidth; percentageFromTop = distanceTopToCenterCircles / displaySizeHeight; } else if(minimumRadiusCircleMove) { radiusSelection = DPIScale::PixelsToDips(pixelX, pixelY); FLOAT xDifference = centerCircles.x - radiusSelection.x; FLOAT yDifference = centerCircles.y - radiusSelection.y; minimumRadius = sqrtf(xDifference*xDifference + yDifference*yDifference); minimumRadiusPercentage = minimumRadius/(displaySizeWidth/2); } else if(maximumRadiusCircleMove) { radiusSelection = DPIScale::PixelsToDips(pixelX, pixelY); FLOAT xDifference = centerCircles.x - radiusSelection.x; FLOAT yDifference = centerCircles.y - radiusSelection.y; maximumRadius = sqrtf(xDifference*xDifference + yDifference*yDifference); maximumRadiusPercentage = maximumRadius/(displaySizeWidth/2); } InvalidateRect(m_hwnd, NULL, FALSE); } } void DemoApp::OnLButtonUp() { ReleaseCapture(); }