2010-01-14 14 views
6

Come posso disegnare un elastico di opacità zero su un modulo di Windows con opacità 0.3? (L'elastico è realizzato dopo un esempio MicrosoftElastico riempito in Winforms Applicazione


Aggiornamento:.

ho bisogno che elastico per lavorare qualcosa di simile a una maschera Se si utilizza Jing o qualsiasi altro strumento screenshot , vedrai ESATTAMENTE ciò che devo fare quando provi a fare uno screenshot: lo schermo diventa semi-opaco e quando fai la selezione, vedrai la selezione di opacità 0

+2

Zero opacità significa completamente trasparente. Penso che tu intenda opaco. – SLaks

+0

come sarai in grado di vederlo? – Matt

+0

A proposito, quell'articolo è sbagliato. Puoi semplicemente chiamare 'ControlPaint.DrawReversibleFrame': http://msdn.microsoft.com/en-us/library/system.windows.forms.controlpaint.drawreversibleframe.aspx. (Anche se non esisteva in .Net 1.0) – SLaks

risposta

6

È questo il droide che stavi cercando?

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

Bello, grazie! – andySF

+0

Horray, ora posso commentare. Grazie per aver contrassegnato la risposta – Dearmash

+1

questo era totalmente il droide che stavo cercando –

1

Hai bisogno di usare un opaco parzialmente opaco colore in sede di elaborazione:

linea aggiornata da articolo collegato, nel metodo MyDrawReversibleRectangle:

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

scusa ma non funziona. Non so perché, ma qui c'è una schermata di avvio http://screencast.com/t/NjM1NjBkZTc. Il colore in grigio proviene dalla mia forma a schermo intero opacità .4 e il rettangolo tratteggiato è il metodo DrawReversibleFrame che ignora completamente il parametro backcolor. Grazie e scusa il mio inglese. – andySF

0

Basta utilizzare un ulteriore forma, senza darlo a vedere nella barra delle applicazioni, o di altra forma-options. Imposta la regione del modulo che mostra solo l'elastico. E assicurati che entrambe le finestre si comportino come se fosse una finestra (in movimento, in chiusura, ...). So che non è un modo elegante, ma con un po 'di lavoro può produrre buoni risultati. Puoi assicurarti che il modulo sia in cima alla gerarchia dei moduli e che non sia ancora attivo.

Impostando la regione buona, tutti gli eventi andranno all'altro modulo.

Questo è il modo in cui ho lavorato fuori un problema di equivalente (non dico che è una buona soluzione, ma funziona)

+0

Non penso che funzionerà per una cornice reversibile. – SLaks

+0

Se non avrò successo con qualcosa, questa sarà probabilmente la mia soluzione. Grazie – andySF

1

ho usato il codice che @Dearmash fornito nel programma di utilità di cattura dello schermo che viene fornito con il mio aperta app fonte BugTracker.NET. L'app non è molto grande, quindi se stai facendo roba per la cattura dello schermo, potrebbe essere un buon punto di partenza. Maggiori informazioni qui:

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

Problemi correlati