Utilisation des styles xp avec gcc, dev-c++, bcc, ...

Contenu du snippet

Bon ben c'est pas sorcier, après çà vous pourrez faire des exécutables autonomes qui prendront l'apparence du thème XP de l'utilisateur.

Par autonomes, il faut comprendre "qui n'ont pas besoin d'un fichier .manifest", vu que celui-ci sera inclus dans le fichier binaire.

Ceci s'applique à tout compilateur en ligne de commande, les versions avec IDE fournissant en général une classe pour utiliser les thèmes XP.

Source / Exemple :


// inclure la ligne suivante dans votre script de ressources :
CREATEPROCESS_MANIFEST_RESOURCE_ID	RT_MANIFEST	"xp.manifest"

// ces constantes sont normalement définies dans winuser.h, toutefois si votre compilateur ne les connait pas, voici comment les définir (dans votre en-tête de ressources, par exemple, sinon vous pouvez les remplacer directement dans votre script mais ce ne sera pas très standard) :
#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
  #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#endif
#ifndef RT_MANIFEST
  #define RT_MANIFEST 24
#endif

// enregistrer ceci dans le fichier "xp.manifest" (format ASCII) :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="X86"
        name="Windows XP Visual Styles for GCC"
        type="win32"
    />
    <description>Windows XP Visual Styles for GCC</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
</assembly>

// pour terminer, voici les lignes à inclure dans votre code source :
#define WIN32_LEAN_AND_MEAN
#define ISOLATION_AWARE_ENABLED
// (ces deux define sont facultatifs pour GCC, mais permettront aux personnes utilisant VC++ ou BCC de recompiler votre projet sans trop de problèmes, donc autant les mettre, çà ne mange pas de pain)
#include <windows.h>
#include <commctrl.h>

// il ne vous reste plus qu'à appeler InitCommonControls dans votre WinMain
// bien sûr, il faudra également linker votre exécutable avec la lib comctl32

Conclusion :


Précision : InitCommonControls doit être appelée AVANT tout appel à CreateWindow ou CreateWindowEx (çà vaut aussi pour les DialogBox)

J'ai rédigé ceci à partir de la MSDN et du script de ressources de Delphi, qui m'a donné la valeur du RT_MANIFEST

En espérant que ceci vous sera d'une quelconque utilité ;)

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.