System::Void ChartDiagramForm::OnDiagramMouseWheel(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { const double ZOOM_FACTOR = 1.6; auto axis = chart->ChartAreas[0]->AxisX; double initialAxisMousePosition; try { initialAxisMousePosition = axis->PixelPositionToValue(e->X); } catch( ArgumentException ^ ) { initialAxisMousePosition = (axis->ScaleView->ViewMinimum + axis->ScaleView->ViewMaximum)/2.; } if( e->Delta > 0 ) // zoom in { double dToLeft = (initialAxisMousePosition - axis->ScaleView->ViewMinimum) / ZOOM_FACTOR; double dToRight = (axis->ScaleView->ViewMaximum - initialAxisMousePosition) / ZOOM_FACTOR; axis->ScaleView->Zoom(initialAxisMousePosition - dToLeft, initialAxisMousePosition + dToRight); } else { // zoom out double dToLeft = (initialAxisMousePosition - axis->ScaleView->ViewMinimum) * ZOOM_FACTOR; double dToRight = (axis->ScaleView->ViewMaximum - initialAxisMousePosition) * ZOOM_FACTOR; if( dToLeft + dToRight >= axis->Maximum - axis->Minimum ) axis->ScaleView->ZoomReset(); else axis->ScaleView->Zoom(initialAxisMousePosition - dToLeft, initialAxisMousePosition + dToRight); } }