2010-01-14 9 views
6

¿cómo puedo dibujar una banda de goma de opacidad cero sobre una forma de ventana con 0.3 de opacidad? (La banda de goma se hace después de un ejemplo Microsoftbanda de goma llena en la aplicación Winforms


Actualización:.

necesito esa banda de goma para trabajar algo así como una máscara Si utiliza Jing o cualquier otra herramienta de captura de pantalla , verá EXACTAMENTE lo que tengo que hacer cuando intente hacer una captura de pantalla: la pantalla se vuelve semiopaca y cuando hace la selección, verá la selección de 0 opacidad

+2

cero opacidad significa totalmente transparente. Creo que te refieres a opaco. – SLaks

+0

¿cómo vas a poder verlo? – Matt

+0

Por cierto, ese artículo es incorrecto. Simplemente puede llamar a 'ControlPaint.DrawReversibleFrame': http://msdn.microsoft.com/en-us/library/system.windows.forms.controlpaint.drawreversibleframe.aspx. (Aunque no existía en .Net 1.0) – SLaks

Respuesta

6

es éste el androide que buscabas?

public Form1() 
    { 
     InitializeComponent(); 
     DoubleBuffered = true; 
    } 

    bool mouseDown = false; 
    Point mouseDownPoint = Point.Empty; 
    Point mousePoint = Point.Empty; 

    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     base.OnMouseDown(e); 
     mouseDown = true; 
     mousePoint = mouseDownPoint = e.Location; 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     base.OnMouseUp(e); 
     mouseDown = false; 
    } 

    protected override void OnMouseMove(MouseEventArgs e) 
    { 
     base.OnMouseMove(e); 
     mousePoint = e.Location; 
     Invalidate(); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 

     if (mouseDown) 
     { 
      Region r = new Region(this.ClientRectangle); 
      Rectangle window = new Rectangle(
       Math.Min(mouseDownPoint.X, mousePoint.X), 
       Math.Min(mouseDownPoint.Y, mousePoint.Y), 
       Math.Abs(mouseDownPoint.X - mousePoint.X), 
       Math.Abs(mouseDownPoint.Y - mousePoint.Y)); 
      r.Xor(window); 
      e.Graphics.FillRegion(Brushes.Red, r); 
      Console.WriteLine("Painted: " + window); 
     } 
    } 
+0

¡Agradable, gracias! – andySF

+0

Horray, ahora puedo comentar. Gracias por marcar la respuesta – Dearmash

+1

esto fue totalmente el droide que estaba buscando –

1

Debe usar una pantalla parcialmente opaca color al dibujar:

línea de Actualización del artículo enlazado, en el método MyDrawReversibleRectangle:

ControlPaint.DrawReversibleFrame(rc, Color.FromArgb(80, 120, 120, 120), FrameStyle.Dashed); 
+0

lo siento, pero eso no funciona. No sé por qué, pero aquí hay una captura de pantalla http://screencast.com/t/NjM1NjBkZTc. El color gris es de mi formato de pantalla completa de opacidad .4 y el rectángulo discontinuo es el método DrawReversibleFrame que ignora por completo el parámetro backcolor. Gracias y disculpa mi inglés. – andySF

0

sólo tiene que utilizar una forma adicional, sin mostrarlo en la barra de tareas, o de otra forma-options. Establezca la región de la forma en que solo muestra la banda elástica. Y asegúrese de que ambas ventanas se comporten como si fuera una sola ventana (movimiento, cierre, ...). Sé que no es una manera elegante, pero con un poco de trabajo puede producir buenos resultados. Puede asegurarse de que el formulario esté en la parte superior de la jerarquía de formularios y aún no reciba el foco.

Al configurar la región como buena, todos los eventos pasarán a la otra forma.

Esa es la forma en que llegó a un problema equivalente (no digo que es una buena solución, pero funciona)

+0

No creo que esto funcione para un marco reversible. – SLaks

+0

Si no voy a tener éxito con algo, probablemente esta sea mi solución. Gracias – andySF

1

He utilizado el código que @Dearmash suministra en la utilidad de captura de pantalla que viene con mi aplicación de código abierto BugTracker.NET. La aplicación no es muy grande, así que si estás haciendo capturas de pantalla, podría ser un buen punto de partida. Más información aquí:

http://ifdefined.com/blog/post/Screen-capture-utility-in-C-NET.aspx

Cuestiones relacionadas