begin process at 2012 05 24 03:56:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > RICHEDIT AVEC SUPPORT DES THÈMES XP

RICHEDIT AVEC SUPPORT DES THÈMES XP


 Information sur la source

Note :
8,25 / 10 - par 4 personnes
8,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Initié Date de création :06/01/2005 Date de mise à jour :06/01/2005 23:58:55 Vu / téléchargé :5 833 / 490

Auteur : Nebula

Ecrire un message privé
Site perso
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette petite astuce permet aux Richedits d'avoir (enfin !) la gestion des thèmes de Windows XP. Il a été adapté à partir d'un code C++ dont je vous conseille la lecture, car il explique très bien comment gérer ces fameux thèmes, bien que je ne trouve pas son fonctionnement optimal : l'auteur utilise un sous-classement de chaque contrôle, alors que ma version super-classe tous les Richedits en un seul appel, au lancement du programme.

La gestion des thèmes est faite dynamiquement : le programme essaie de charger uxtheme.dll et s'il n'y arrive pas, entre en mode "compatibilité" et laisse le dessin par défaut (look "classique") se faire. Si cette librairie est chargée en revanche, il essaie d'ouvrir le thème courant, et s'il y arrive (les thèmes sont alors activés) il dessine la bordure du Richedit (look "XP), sinon il laisse le dessin par défaut se faire (les thèmes étant désactivés, restons cohérents).

Petit constat amusant : le dessin des thèmes XP se fait même si l'application n'intègre pas de manifest dans ses ressources, je ne sais pas comment corriger cela (peut-être en cherchant le manifest dans les ressources lors de l'appel de la fonction de sur-classement, mais il doit y avoir un moyen plus direct je pense). Ce n'est pas très gênant étant donné que si on se sert de cette fonction c'est qu'on veut les thèmes XP, mais c'est à savoir ;-)

Pour réutiliser ceci dans vos applications : ne conservez que richxp.h et richxp.c, et éditez ce dernier pour remplacer "config.h" par votre fichier de définitions globales (stdafx.h sous VC++, par exemple), puis faites un appel à LoadRichXP() au début de votre code (AVANT de créer une fenêtre ou une dialog !), et voilà. Vérifier le retour est facultatif, il ne renseigne que sur la présence ou l'absence de uxtheme.dll (évitez d'appeler la fonction plusieurs fois, çà ne servirait à rien et je ne l'ai pas protégée contre cette utilisation idiote).

Le code est entièrement compatible : ANSI et UNICODE, GCC/MinGW et MSVC (et sûrement d'autres), utilise un RichEdit 2.0 et a été écrit en C.

Un conseil : pour éviter des changements de styles superflus, créez vos Richedits avec 0 pour les styles étendus : le programme se charge d'activer ou non WS_EX_CLIENTEDGE en fonction des besoins (si vous mettez des styles étendus, Windows crée la fenêtre puis lui envoie un WM_STYLECHANGED dans la foulée, ce qui surcharge inutilement mon code d'initialisation - ce n'est pas gênant, juste un message inutile à traiter, qui en appelle plusieurs autres ensuite).

Ah aussi... Il n'y a aucun commentaire dans le code, simplement parce que je n'aime pas çà : je préfère avoir le plus de code utile possible devant moi. Le code (C++) à partir duquel j'ai travaillé est disponible ici, et est agrémenté d'explications parfaitement claires et très instructives sur la gestion des thèmes XP, je vous conseille vivement de le lire (comme je disais plus haut), ce code vous semblera limpide ensuite : http://www.codeguru.com/Cpp/W-P/win32/tutorials/ar ticle.php/c8729/


 Conclusion

Description des fichiers du ZIP :

config.h
définitions globales (unicode, macros, etc)

GNUmakefile
Makefile pour le GNU Make

main.c
le programme de test :
il crée deux richedit sur-classés,
un clic sur la fenêtre les active/désactive

resource.rc, manifest.xml
script de ressources et manifest pour les thèmes XP

richxp.h, richxp.c
définition de la fonction de sur-classage et de méthodes internes

mingw.exe, msvc.exe
deux binaires précompilés avec MinGW et MSVC
(comment, vous vous en doutiez ? lol)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

06 janvier 2005 23:58:55 :

 Sources du même auteur

Source avec Zip ÉNUMÉRATION DES PROCESSUS ET DÉCHARGEMENT FORCÉ DE DLL
Source avec Zip EXÉCUTABLES SE VÉRIFIANT LORSQU'ILS SONT LANCÉS
Source avec Zip CALCUL DE HASH MD5 (WIN32)
Source avec Zip VÉRIFIER QUE L'UTILISATEUR EST ADMINISTRATEUR
Source avec Zip KILL ANY PROCESS

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

Commentaires et avis

Commentaire de DeAtHCrAsH le 07/01/2005 20:47:14

Je vois pas de différence sur le screen.
Peut etre que ca vient de la mauvaise qualité de la capture ???

Shell

Commentaire de Matt67 le 07/01/2005 20:53:17

Bonsoir,

même remarque ???

Matt...

Commentaire de JulioDelphi le 07/01/2005 20:57:40 administrateur CS

on vois nettement que le premier riche n'est pas plat , le second l'est, c selon le theme xp. ici c le theme xp par defaut.

Commentaire de Nebula le 07/01/2005 21:05:28

JulioDelphi a raison, regardez mieux la capture : seule la bordure change. C'est subtil (en fait sur le screen, ils sont désactivés : ce serait plus visible si je les avais screenés activés), mais çà se remarque immédiatement si y'a d'autres contrôles sur la fenêtre, comme un EDIT par exemple.

Commentaire de BlackNeo le 14/06/2005 18:13:09

Il faut installer quoi pour que tmschema.h soit présent?
Merci car sinon ca compile pas :(

Commentaire de Nebula le 14/06/2005 18:27:38

www.msdn.com et tu télécharges le Platform SDK si tu as Visual C++

www.mingw.org et tu télécharges le paquet w32api-3.2.tar.gz si tu as GCC (Dev-C++, par exemple)

Commentaire de BlackNeo le 16/06/2005 14:26:11

Merci Nebula

Commentaire de minet03 le 02/07/2005 11:37:30

Ton code m'intéressait dans le but de connaitre plus de message pour les richedit, genre mettre les couleurs. Mais je vois que dans ton code il n'y en a pas. Si tu pouvais me donner un lien (autre que http://msdn.microsoft.com) parce que je cherche, mais je ne trouve que des exemples pour les afficher, et non les afficher.

Commentaire de Nebula le 02/07/2005 12:14:15

Cherche EM_STREAMIN ici même, tu trouveras des réponses satisfaisantes. Sinon (alternative à la génération directe de texte enrichi), EM_EXSETSEL et tu modifies les attributs du texte manuellement.

Commentaire de badr07 le 11/11/2006 21:53:07

salut,
Comment mettre un style(pas Xp)different dans une application(api windows) avec un manifest?

Commentaire de badr07 le 11/11/2006 21:53:36

en c++

Commentaire de victorcoasne le 19/03/2009 00:46:36 10/10

Génial c'est ce que je cherchais, sauf que j'avais trouvé le code d'origine avant cette source (code que je ne comprenait pas).
Mais avec cette source c'est clair comme de l'eau de roche !
10 / 10 !
Encore merci,
Bonne prog,
@++,
Victor

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,714 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales