Directx overlay - change wallpaper on desktop with directx

Description

Vous trouverez le programme compilé et l'installeur à cette addresse:
http://overlaypaper.sourceforge.net/

vous trouverez les derniers codes pour ce programme sur le repository de sourceforge:
http://overlaypaper.svn.sourceforge.net/viewvc/overlaypaper/

Merci de me le faire savoir si quelqu'un veut contribuer à l'avancement de ce projet
Information pour la compil:
  • Telecharger libvlc.dll et le repertoire des plugins de vlc 0.8.x

à cette addresse http://download.videolan.org/pub/videolan/vlc/
  • Telecharger mediainfo

à cette addresse:
http://mediainfo.sourceforge.net
mettre le tout dans debug/release

pour la compil du script nsis mettre toutes les librairies dans release.
Description:

Voici mon premier prog en C#...
J'avais plutôt l'habitude de programmer soit en C++ api win32 ou pour mon taf en vb.net.

Je suis finalement pas trop fan de C#, il a les défaut de C++ et pas aussi intuitif que vb.net. bref à l'avenir je préférerai soit coder en api win32 soit en vb.net.

J'ai téléchargé les sources de vlc 0.9.4, et adapter le directx-wallpaper sur ce prog uniquement pour les wallpapers.

J'ai repris pas mal de code traduit en C# de vlc et également le BLit d'une source sur code project (overlay tool).
je tenais aussi à dire que l'equipe de vlc sont des bêtes, leur code est incroyable.

Source / Exemple :


//overlay trick: desktop color:0x80010
//OverlayEffects avec color: ck.ColorSpaceLowValue = ck.ColorSpaceHighValue = 0x100008;

// OverlayDirectX
//Première étape enlevé le wallpaper et mettre a black pour Overlay:
        private void SwitchWallpaperMode(bool onOff)
        {

            int[] elements = { 1 };
            if (onOff)
            {
                int[] backgorund = { ColorTranslator.ToWin32(SystemColors.Desktop) }; //save the current desktop color
                color_bkg = backgorund;
                int[] colors = { 0x80010 };
                SetSysColors(elements.Length, elements, colors); // put black to the desktop color
                SystemParametersInfo(20, 0, "", 0); //remove wallaper
                ToggleScreenSaverActive(onOff); //switch off the screensaver
            }
            else
            {
                SetSysColors(elements.Length, elements, color_bkg); //restore old desktop color
                SystemParametersInfo(20, 0, null, 0); //restore wallpaper
                ToggleScreenSaverActive(onOff); //switch on the screensaver
            }

        }
//Deuxième étape DirectXInitDDraw (initialise les directdraw surface:
        private void DirectXInitDDraw()
        {
            _displayDevice = new Microsoft.DirectX.DirectDraw.Device(); //create the device
            _displayDevice.SetCooperativeLevel(null, CooperativeLevelFlags.Normal);
            SurfaceDescription description = new SurfaceDescription();
            description.SurfaceCaps.PrimarySurface = true;
            _front = new Surface(description, _displayDevice); //set the front to the primary surface
            description.Clear();
            description.SurfaceCaps.Overlay = true;  //prepare the description of overlay surface
            description.SurfaceCaps.Flip = true;
            description.SurfaceCaps.Complex = true;
            //description.SurfaceCaps.VideoMemory = true;
            description.Width = _screenWidth;
            description.Height = _screenHeight;
            description.BackBufferCount = 1;

            PixelFormat pxFrmt;
            pxFrmt.FourCC = 0x32595559; //Yuv2
            pxFrmt.FourCcIsValid = true;

            description.PixelFormatStructure = pxFrmt;
            overlay = new Surface(description, _displayDevice);
            SurfaceCaps caps = new SurfaceCaps();
            caps.BackBuffer = true;

            _back = overlay.GetAttachedSurface(caps); //caps surface
 
            ColorKey ck = new ColorKey();
            ck.ColorSpaceLowValue = ck.ColorSpaceHighValue = 0x100008; //color overlay effect to draw on desktop color 0x80010 (see SwitchWallpaperMode)

            overFX.DestinationColorKey = ck;
            overFX.ArithmeticStretchY = true;

        }

//troisieme étape
//blit un bitmap to backbuffer
//exemple:
//Blit((Bitmap)m_RenderTarget, _back);
//overlay.Flip(null, FlipFlags.Wait);
//voir code pour le blit c'est du GDI+
//Attention à la première image updaté l'overlay ex:
//overlay.UpdateOverlay(_back, OverlayFlags.Show | OverlayFlags.Effects | OverlayFlags.KeyDestinationOverride, overFX); //update overlay for the first time
                    
//Class Transition
//voir class pour code du birghtness et setcolormatrix pour l'opacity.

Conclusion :


Elle autorise le drag and drop et gère quelques événements (Buttons/radio buttons/image preview etc...)
En espérant que cela aide certaine personne dans le direct x, ou il faut avouer que ce n'est pas aussi documenter et même sur le web on trouve peu d'exemples que le reste.

voilou.
@+

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.