2009-08-20 6 views
0

Je suis à la recherche d'un outil/contrôle/composant que je peux utiliser pour positionner sur le contrôle de l'image de mon formulaire de victoire, et il choisira une capture d'écran de la région spécifique sélectionner.Composant du sélecteur d'écran pour Winforms (.NET)

L'utilisateur ne sera pas en mesure de déplacer cette "caméra" hors du formulaire, et après avoir pris l'image partielle du contrôle d'image, j'ai besoin de la caméra pour marquer la zone copiée en la colorant avec une couche spéciale dehors, peu importe comment.

Je serais reconnaissant pour toute idée et pour avoir votre opinion sur le composant suggéré.

Nous travaillons avec .NET fx 3.5 avec l'application Winforms.

Merci!

Répondre

1

Dans le constructeur de votre formulaire (après la InitializeComponent(); appel), ajouter:

monitor.MouseMove += new MouseEventHandler(monitor_MouseMove); 
monitor.MouseLeave += new EventHandler(monitor_MouseLeave); 
monitor.MouseClick += new MouseEventHandler(monitor_MouseClick); 

Maintenant, ajoutez ce qui suit à votre classe Form:

const int adjustX = -50; 
const int adjustY = -50; 

public Size boxSize = new Size(100, 100); 
public int lastX = 2 * adjustX; 
public int lastY = 2 * adjustY; 

private void monitor_MouseMove(object sender, MouseEventArgs e) { 
    if (e.X != lastX || e.Y != lastY) { 
    Graphics g = monitor.CreateGraphics(); 

    g.CopyFromScreen(monitor.PointToScreen(new Point(lastX + adjustX, lastY + adjustY)), new Point(lastX + adjustX, lastY + adjustY), boxSize, CopyPixelOperation.DestinationInvert); 

    lastX = e.X; 
    lastY = e.Y; 

    g.CopyFromScreen(monitor.PointToScreen(new Point(e.X + adjustX, e.Y + adjustY)), new Point(e.X + adjustX, e.Y + adjustY), boxSize, CopyPixelOperation.DestinationInvert); 
    } 
} 

void monitor_MouseLeave(object sender, EventArgs e) { 
    Graphics g = monitor.CreateGraphics(); 

    g.CopyFromScreen(monitor.PointToScreen(new Point(lastX + adjustX, lastY + adjustY)), new Point(lastX + adjustX, lastY + adjustY), boxSize, CopyPixelOperation.DestinationInvert); 

    lastX = 2 * adjustX; 
    lastY = 2 * adjustY; 
} 

Enfin, dans votre gestionnaire de clic de souris :

void monitor_MouseClick(object sender, MouseEventArgs e) { 

} 

Vous devrez ajouter ce que vous voulez faire avec la zone sélectionnée. Vous pouvez le copier dans une autre zone d'image, l'enregistrer en tant que bitmap, peu importe.