myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Ring - Fenster-Animation
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Ring - Fenster-Animation

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.036
Entwicklungsumgebung: VS / Mono (IOS/LINUX)
Herkunft: Zentralschweiz


Programmierhans ist offline

Ring - Fenster-Animation

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Den folgenden Code könnte man auch in die eigenen Apps einbauen um z.B: Kunden darauf aufmerksam zu machen, dass noch eine Eingabe von ihm erwartet wird.

Was der Code genau macht findet selber raus:-)

C#-Code:
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Forms;


namespace WindowsApplication19
{
    /// <summary>
    /// Class for getting images of the desktop.
    /// </summary>
    /// <threadsafety static="false" instance="false"/>
    /// <note type="caution">This class is not thread safe.</note>
    /// <remarks>This class has been scaled back to the essentials for capturing a segment of
    /// the desktop in order to keep Cropper as small as possible.</remarks>
    internal class Desktop
    {
        private const int SRCCOPY = 0x00CC0020;

        #region Dll Imports

        [DllImport("user32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
        static extern IntPtr GetDesktopWindow();

        [DllImport("user32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
        private static extern IntPtr GetWindowDC(IntPtr hwnd);

        [DllImport("user32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
        private static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);

        [DllImport("gdi32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
        private static extern UInt64 BitBlt
            (IntPtr hDestDC, int x, int y, int nWidth, int nHeight,
            IntPtr hSrcDC, int xSrc, int ySrc, System.Int32 dwRop);

        #endregion

        private Desktop(){}

        /// <summary>
        /// Gets a segment of the desktop as an image.
        /// </summary>
        /// <param name="x">Starting point X coordinate.</param>
        /// <param name="y">Starting point Y coordinate.</param>
        /// <param name="width">The width of the area to capture.</param>
        /// <param name="height">The height of the area to capture.</param>
        /// <returns>A <see cref="System.Drawing.Image"/> containg an image of the desktop
        /// at the specified coordinates</returns>
        internal static Image GetBitmap(int x, int y, int width, int height)
        {
            Graphics desktopGraphics;
            Image desktopImage;
            Graphics drawGraphics;
            Image drawImage;
            Rectangle virtualScreen = SystemInformation.VirtualScreen;

            //Create the image and graphics to capture the desktop.
            //
            using(desktopImage = new Bitmap(virtualScreen.Width, virtualScreen.Height))
            {
                using(desktopGraphics = Graphics.FromImage(desktopImage))
                {
                    //Pointers for window handles
                    //
                    IntPtr ptrDesktop = desktopGraphics.GetHdc();
                    IntPtr ptrDesktopWindow = GetDesktopWindow();
                    IntPtr ptrWindowDC = GetWindowDC(ptrDesktopWindow);

                    //Grap the entire virtual desktop
                    //
                    BitBlt(ptrDesktop,
                        0,
                        0,
                        virtualScreen.Width,
                        virtualScreen.Height,
                        ptrWindowDC,
                        virtualScreen.X,
                        virtualScreen.Y,
                        SRCCOPY);

                    //Release and dispose the graphics object so we have an image to work with.
                    //
                    ReleaseDC(ptrDesktopWindow, ptrWindowDC);
                    desktopGraphics.ReleaseHdc(ptrDesktop);

                    //Set pointers to zero.
                    //
                    ptrDesktop = IntPtr.Zero;
                    ptrDesktopWindow = IntPtr.Zero;
                    ptrWindowDC = IntPtr.Zero;
                }

                //Create a new image and graphics object the size we want so we can 'crop' it out of the desktop.
                //
                drawImage = new Bitmap(width, height);
                using(drawGraphics = Graphics.FromImage(drawImage))
                {
                    //Draw the area of the desktop we want into the new image.
                    //
                    drawGraphics.DrawImage(
                        desktopImage,
                        new Rectangle(new Point(0,0), new Size(width, height)),
                        new Rectangle((virtualScreen.X - x) *-1, (virtualScreen.Y - y) *-1, width, height),
                        GraphicsUnit.Pixel);

                }
            }

            //Return a referance to our image.  
            //Don't forget to dispose it in the client code when finished.
            //You will have memory leaks if not.
            //
            return drawImage;
        }
    }
}

C#-Code:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication19
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private Rectangle _RectScreen=Screen.PrimaryScreen.WorkingArea;
        private System.Windows.Forms.Timer timer1;
        private System.ComponentModel.IContainer components;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
            this.Size=new Size(this._RectScreen.Width+100,this._RectScreen.Height+100);
            this.BackgroundImage =Desktop.GetBitmap(0,0,1280,1024);

        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            //
            // timer1
            //
            this.timer1.Enabled = true;
            this.timer1.Interval = 5000;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Name = "Form1";
            this.ShowInTaskbar = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
            this.Text = "Form1";

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void timer1_Tick(object sender, System.EventArgs e)
        {
            this.Ring();
        }

        private void Ring()
        {
            this.BackgroundImage=Desktop.GetBitmap(0,0,1280,1024);
            this.Show();

            for (int i=0;i<10;i++)
            {

                this.Location=new Point(this.Location.X-20,this.Location.Y);
                Application.DoEvents();
                this.Location=new Point(this.Location.X+40,this.Location.Y);
                Application.DoEvents();
                this.Location=new Point(this.Location.X-20,this.Location.Y);
                Application.DoEvents();

            }
            this.Hide();
            this.BackgroundImage.Dispose();
            this.BackgroundImage=null;
        }
    }
}

Augenzwinkern
Neuer Beitrag 02.09.2005 21:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Xqgene
myCSharp.de-Poweruser/ Experte

Dabei seit: 29.04.2004
Beiträge: 2.051


Xqgene ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

wie kommt man bloß auf so eine idee?! geschockt

aber ist lustig! großes Grinsen
Neuer Beitrag 02.09.2005 23:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.036
Entwicklungsumgebung: VS / Mono (IOS/LINUX)
Herkunft: Zentralschweiz

Themenstarter Thema begonnen von Programmierhans

Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ist halt für alle die schon alles haben :-) und Zeit für einen Spass muss man sich nehmen.
Neuer Beitrag 02.09.2005 23:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
SimonKnight6600 SimonKnight6600 ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1433.gif


Dabei seit: 09.03.2005
Beiträge: 709
Entwicklungsumgebung: Microsoft Visual Studio 2008
Herkunft: Österreich


SimonKnight6600 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Cool. Den Code werd ich verwenden um meinem Freund mal einen Schreck einzujagen großes Grinsen

Gruß,
SimonKnight6600
Neuer Beitrag 03.09.2005 22:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ikaros
myCSharp.de-Mitglied

Dabei seit: 27.05.2005
Beiträge: 1.725


ikaros ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

"wie kommt man bloß auf so eine idee?! "

Eindeutig ein Fall von zuviel Freizeit. Augenzwinkern
Neuer Beitrag 03.09.2005 22:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Jahre.
Der letzte Beitrag ist älter als 7 Jahre.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 24.05.2013 06:47