Directx overlay - change wallpaper on desktop with directx

Soyez le premier à donner votre avis sur cette source.

Vue 12 572 fois - Téléchargée 613 fois

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

Ajouter un commentaire

Commentaires

youpiyoyo
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
-
oui c'est mon défaut effectivement... mais comme pour moi ceci est un prog de test pour un autre programme, ce qui m'importe c'est la class overlay que j'ai créé. mais merci pour ton commentaire, j'ajouterai certaines explications sur la class overlay et non sur la form puisque c'est juste de la gestion d'evenement et donc rien de passionnant.
cs_Willi
Messages postés
2376
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
16 -
Il y a de bonnes choses et mais cela manque de commentaires pour comprendre certains points. ++

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.