VC8 XP style

Résolu
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007 - 7 mars 2006 à 19:27
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007 - 8 mars 2006 à 13:32
Salut, j'ai un ancien programme que j'avais codé sous VC6 et je vois que dans l'IDE de VC8, mes dialogbox ont automatiquement pris le style XP. Cool.
Seulement quand je compile, je me retrouve avec les anciens controles :'(
Dois-je creer un nouveau projet et refaire mes fenetres ou existe-t-il une solution de conversion ?
merci.

7 réponses

spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
7 mars 2006 à 20:23
salut

Ceci est tout a fait normal et il n'y a aucune conversion a faire ... (Surtout ne change rien !! ce sera du temps perdu)
Il faut simplemnt que tu "insére" un fichier "manifest" dans ton executable
Va dans les propriétés de ton projet :
->Configurations properties->Linker->Manifest file
a l'option "Generate manifest" met "yes"
a l'option "Manifest file" met le nom du fichier manifest avec son chemin d'acces

Ton fichier manifest DOIT avoir cette gueule :
Nom : tonapp.exe.manifest
Contenu :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>





<description>wxWidgets application</description>

<dependency>

<dependentAssembly>



</dependentAssembly>

</dependency>



Voila ca devrait marcher ...

Tu pouvait le faire sous VC6 aussi en bidoullant un peu (meme si le logiciel est sorti avant WinXP !!)

Voila a+
3
cs_Xaviou Messages postés 154 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 2 octobre 2009 1
7 mars 2006 à 22:22
Voici comment je procède sous VS.NET 2003 :
Premièrement, tu fais comme te l'as expliqué Spiky31 : Tu crées un fichier texte contenant les infos qu'il t'a donnée.
Par exemple, je viens de le faire avec une application win32, ça donne ça :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<description>EssaiManifest</description>
<dependency>
<dependentAssembly>

</dependentAssembly>
</dependency>

Pour vérifier si ton fichier est valide, donnes-lui le même nom que ton éxécutable en lui ajoutant ".manifest" à la fin
Ainsi, mon exemple me fait un éxécutable qui s'appelle EssaiManifest.exe
J'ai donc appelé mon fichier EssaiManifest.exe.manifest
Place ce fichier dans le même répertoire que l'éxécutable.
Lance ton éxécutable par un double-click depuis l'explorateur, si ton fichier est OK, tu doit avoir le style XP pris en compte. Pour info, avec une simple application Win32 de base, et un malheureux bouton dessus, j'ai été obligé de linker avec comctl32.lib et de faire un appel à InitCommonControls(); Ceci est dû au fait que les contrôles ayant le style XP ne sont plus considérés comme de simples boutons, mais comme des contrôles avancés (ou quelque chose comme ça).
L'inconvénient de cette méthode, c'est que tu es obligé de fournir le fichier manifest avec ton application.
Il existe une autre méthode qui est de l'inclure dans les resources de ton éxécutable.
Voici la marche à suivre (je suis toujours sous VC.NET 2003)
Déplace ton fichier manifest dans le répertoire contenant tes resoures, et, comme c'est du xml, appelles-le tout simplement "Manifest.xml". (plus besoin du nom de l'éxéctuable, on s'en fout)
Ensuite, dans Visual Studio, vas dans l'onglet des resources, et fais un click droit sur le nom de ton fichier resources dans l'arborescence (pour moi, c'est EssaiManifest.rc)
Clique sur Resources Symbols, et ajoute une entrée appelée IDR_MANIFEST, en lui donnant la valeur 1 (c'est impératif)
Vas ensuite dans Project / Add Resource, choisi "Import", et vas chercher le fichier "Manifest.xml"
Visual Studio te demande alors de quel type est cette resource : tapes RT_MANIFEST dans le champ Ressource Type.
Normalement, ton fichier a du s'ouvrir en mode hexadécimal dans l'éditeur de Visual Studio. Fermes-le, on n'a plus besoin de l'éditer.
Changes ensuite l'ID de la resource que l'on vient d'ajouter, en lui donnant IDR_MANIFEST (celui qui valait 1 tout à l'heure).
Compiles, et le tour est joué. Le fichier manifest a été inclus à ton éxécutable, et n'a plus besoin d'être fourni avec l'application.

Une autre méthode existe pour les éxécutables dont tu ne possèdes pas le code source, c'est d'ajouter ce fichier à l'éxécutable avec un logiciel permettant de lire/écrire les resources d'un éxécutable (par exemple, ResHack).

J'espère avoir été clair
Si tu rencontres des problèmes, n'hésites pas.
3
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
8 mars 2006 à 06:24
Salut

La lib "comctl32.lib" je la lie habituellement quand j'utilise des controles qui ne sont pas chargé en memoire par winXP. (Exemple : Progress Bar)
Par contre elle ne ma jamais servi pour obtenir le style XP ...
Maintenant, je ne savais pas qu'un appel a InitCommonControls() m'obligeait a linker le fichier manifest, comme je le linke tout le temps ... :) Bref a verifier
Pour ta derniere question Joebar, ca vien tout simplement du fait que je me suis planté :). Mon fichier je le mets dans "Manifest tool"->"Additional manifest files". Voila excuse moi pour ma petite erreur ...

Si ta encore des questions, n'esites pas, j'essaierais d'y repondre ce soir (la je vais au boulot ...) sauf si quelqu'un ta deja repondu :)

Voila a+
3
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
7 mars 2006 à 21:44
J'ai fais ce que tu m'a dit : le "yes" etait deja la. J'ai ensuite ouvert le fichier "Projet05.exe.intermediate.manifest" de mon repertoire debug et remplacé le code existant pas le tiens.
J'ai recompilé mais rien n'a changé.
Sur un autre forum j'ai lu qu'il fallais un InitCommonControls() avant les createdialog et dialogbox. J'ai esseyé aussi, j'ai eu une erreur de lien.
J'ai alors rajouté
#include "commctrl.h"
#pragma comment(lib, "comctl32.lib")
//#pragma comment(lib, "libcomctl32.a")

La lib commentée il ne l'a pas trouvé, j'ai donc compilé comme ça et ca passe. Mais toujours pas de XP style.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
7 mars 2006 à 21:53
Oups désolé j'avais pas lu ça name="tonapp.exe", ça marche, impec merci ! :)
0
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
7 mars 2006 à 22:01
Par contre à chaque modif de mon code et compil, il me recree le fichier par default... si tu connais un truc, sinon c'est pas grave, je le ferais à la fin.
0
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
8 mars 2006 à 13:32
J'ai mis le manifest dans "manifest supplémentaire", ça fonctionne à merveille :)
J'ai aussi commenté les InitCommonControls(), ils ne sont pas obligatoires avant chaque appels aux boites de dialogue comme je l'avais lu. Je l'ai donc juste mis au debut du winmain.
J'ai aussi testé ta soluce Xav, mais ca n'a pas fonctionné. Ton explication etait claire mais peut etre que quelque chose a changé dans la version 8.
Merci à vous deux !! :)
bye
0
Rejoignez-nous