2010-07-03 9 views
0

J'ai dessiné un rectangle. Il s'agit d'une barre de défilement horizontale à l'écran. Maintenant, je veux zoomer sur le rectangle. Lors du zoom, la hauteur du rectangle augmente, l'emplacement se décale et la barre de défilement horizontale augmente. Comment faire ça? Je vous écris ce morceau de code:Comment agrandir un rectangle?

rect = new Rectangle(rect.Location.X, this.Height - rect.Height,rect.Width, Convert.ToInt32(rect.Size.Height * zoom)); 
g.FillRectangle(brush, rect); 

Cela fonctionne pour l'emplacement du rectangle qui est le rectangle décale vers le haut, mais la hauteur n'augmente pas. Aidez-moi!

Répondre

1

Si vous souhaitez simplement redimensionner le rectangle autour du centre du rectangle, vous devez augmenter la largeur et la hauteur du rectangle et soustraire la moitié de l'augmentation de l'emplacement.

Ce n'est pas testé, mais devrait vous donner l'idée générale

double newHeight = oldHeight * scale; 
double deltaY = (newHeight - oldHeight) * 0.5; 

rect = new Rectangle(
    rect.Location.X, (int)(rect.Location.Y - deltaY), 
    rect.Width, (int)newHeight); 

Peut-être une meilleure alternative serait de regarder à l'aide Graphics.ScaleTransform.

0

Il suffit d'ajouter un txtZoom à votre formulaire:

using System.Drawing; 
using System.Drawing.Drawing2D; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      this.txtZoom.Text = "1"; 
      this.txtZoom.KeyDown += new KeyEventHandler(txtZoom_KeyDown); 
      this.txtZoom_KeyDown(txtZoom, new KeyEventArgs(Keys.Enter)); 
     } 

     void txtZoom_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyData == Keys.Enter) 
      { 
       this.Zoom = int.Parse(txtZoom.Text); 
       this.Invalidate(); 
      } 
     } 

     public int Zoom { get; set; } 

     protected override void OnPaint(PaintEventArgs e) 
     { 
      GraphicsPath path = new GraphicsPath(); 
      path.AddRectangle(new Rectangle(10, 10, 100, 100)); 

      Matrix m = new Matrix(); 
      m.Scale(Zoom, Zoom); 

      path.Transform(m); 
      this.AutoScrollMinSize = Size.Round(path.GetBounds().Size); 

      e.Graphics.FillPath(Brushes.Black, path); 
     } 
    } 
}