Blog d'Emmanuel Istace

Screen Management Library en dotnet

Posted in DotNet, Programmation by Emmanuel Istace on 22 mai 2011

Salut, voici la seconde librairie que je vous avais promis, encapsulant du code natif pour jouer avec les résolutions d’affichages en dotnet managed.

Cette librairie n’est pas évidente à comprendre je vais donc vous montrer un exemple et n’hésitez pas à poser vos questions.

Dans notre exemple nous avons deux listbox, une listant les devices (sorties graphique) et une autre listant les mode de la device selectionné (par exemple, ecran 1 peu faire du 800*600 en 16bit, 800*600 en 32bit… etc… etc…).

Pour des questions de facilitées je reste sur du wpf “crado”, c’est a dire sans binding et autre mvvm afin de parler a un maximum de personne et correspondre a un maximum de cas.

Lors de l’instanciation nous remplirons notre première listbox ainsi :

this.listDevices.ItemsSource = Screenmgmt.EnumDevices();

Avec cela nous récuperons toutes les devices dans une List<string>

Ensuite,dans le handler tu SelectionChanged sur la listDevices :

            int devNum = listDevices.SelectedIndex;
            btnSet.IsEnabled = Screenmgmt.MainDevice(devNum);
            this.listSettings.ItemsSource = Screenmgmt.EnumModes(devNum).Distinct().Reverse();

Nous récupérons le selected index, si c’est la device principale on active le bouton “appliquer” (optionnel) et enfin nous récuperons tous les modes d’affichage de notre device.

Enfin, lorsque l’on click sur appliquer nous voulons a la fois appliquer la nouvelle resolution mais aussi donner la possibilitée de faire un rollback sur cancel :

   List<int> now = Screenmgmt.SearchActualResolutionModes();
            int set = Screenmgmt.SearchSettingsString(listSettings.SelectedValue.ToString(), listDevices.SelectedIndex);
            if (set != -1)
            {
                Screenmgmt.ChangeResolution(listDevices.SelectedIndex, set);
                if (MessageBox.Show(“Accept ? “, “?”, MessageBoxButtons.OKCancel) == MessageButtons.Cancel)
                    Screenmgmt.ChangeResolution(now[0], now[1]);
            }

On récupère dans une list<string> le numéro de l’écran et l’index du mode actuel de ce dernier afin de pouvoir revenir en arrière. ensuite on récupère l’index du mode a tester, pour ce faire on envoi les deux items sélectionné a une fonction permettant de chercher en string les éléments et qui retourne ensuite le mode associé. On applique ensuite le changement de résolution  avec change résolution en donnant l’index de l’ecran et l’index du mode. Une messageBox est ensuite affiché, si la réponse est Cancel, on reviens avec ChangeResolution a la précédente résolution grace au tableau récupéré au debut contenant le précédent index du mode et de l’ecran.

J’ai développé un control custom fonctionnant comme une message box avec un timer pour ce cas ci. En effet, si la résolution n’est pas supporté par exemple, il sera impossible a l’utilisateur de cliquer sur “Cancel”. Je posterai cette custom message box avec un timer bientôt. Mais je ne voulais pas mélanger cette dernière a cet article.

Voila le code source :- Source -:
Et la librairie :- DLL -:

Inform@tiquement

Tagged with: , , , ,

Cours sur les librairies dans le développement logiciel

Posted in Divers, Programmation by Emmanuel Istace on 5 mars 2011

Salut à tous, j’ai eu l’occasion de donner une leçon dans le cadre du cours de Mr Cailleuw sur l’utilisation de librairies dans le développement logiciel ainsi que sur les raisons qui poussent a segmenter ses logiciels en librairies de composants (indépendamment du facteur non réécriture de code). Les slides ne servant que de support, je mettrai en ligne un complément reprenant ce qui a été donné oralement.

Liens vers les slides sur Scribd
http://www.scribd.com/doc/49791480/langageProc

Présentation powerpoint en pptx (Office 2010)
http://manu404.wolfplex.org/blogdoc/langageProc.pptx

Présentation powerpoint en pdf

http://manu404.wolfplex.org/blogdoc/langageProc.pdf

Inform@tiquement
Istace Emmanuel – Manu404

Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 31 followers