begin process at 2012 05 29 03:37:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Gestion des thèmes XP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gestion des thèmes XP

vendredi 7 janvier 2005 à 02:39:14 | Gestion des thèmes XP

Nebula

Membre Club
Bonsoir,

Vous avez peut-être (ou pas) remarqué ma dernière source sur les richedits avec apparence XP. Je souhaiterais corriger un bug qui fait qu'une application sans manifest (et donc, non censée utiliser les thèmes XP) dessine malgré tout les richedits avec l'apparence XP, ce qui fait tâche au milieu des autres composants...

D'après la MSDN, je devrais utiliser la fonction IsAppThemed et/ou IsThemeActive. Je les ai donc importées et utilisées lors de la réception du message WM_THEMECHANGED mais elles retournent toujours TRUE, indifféremment avec ou sans manifest...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/isappthemed.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/isthemeactive.asp

Merci d'avance...

PS : rien à voir, mais çà serait bien de skinner cette boîte à partir des couleurs du site, çà fait un peu tache ce bleu au milieu de ce... euh, c'est quoi comme couleur d'ailleurs, les cadres de cppfrance ?
vendredi 7 janvier 2005 à 07:42:29 | Re : Gestion des thèmes XP

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
La fonction IsThemeActive te permet juste de savoir si le thème WindowsXP est actif ou si l'utilisateur utilise ce bon vieil habillage de Windows 98 ! Donc que ta fenêtre soit ou pas skinnée, elle te renverra la même chose d'après les recherches que j'ai pu faire.

DarK Sidious

[Administrateur et responsable VB/API du site 
ProgOtoP]
vendredi 7 janvier 2005 à 11:49:23 | Re : Gestion des thèmes XP

Nebula

Membre Club
Certes mais IsAppThemed, tu ne trouves pas que sa description ressemble à ce dont j'ai besoin (et pourtant, elle renvoie toujours TRUE elle aussi) ?
vendredi 7 janvier 2005 à 12:52:35 | Re : Gestion des thèmes XP

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Ben justement : ca renvoie si l'application utilise un thème ou pas...

DarK Sidious

[Administrateur et responsable VB/API du site
ProgOtoP]
vendredi 7 janvier 2005 à 13:04:32 | Re : Gestion des thèmes XP

Nebula

Membre Club
Et elle renvoie TRUE que l'application utilise ou non un manifest (donc, avec ou sans thème activé)...
vendredi 7 janvier 2005 à 13:11:32 | Re : Gestion des thèmes XP

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Le fait d'utiliser ou non un manifest n'empêche pas à la fenêtre d'utiliser le thème XP si Windows utilise un thème (y'a qu'à voir la barre de titre par exemple !). Applique le thème de Windows classique, et rappelle ta fonction IsAppThemed et tu verra...

DarK Sidious

[Administrateur et responsable VB/API du site 
ProgOtoP]
vendredi 7 janvier 2005 à 14:01:27 | Re : Gestion des thèmes XP

Nebula

Membre Club
Ben non, sans manifest seuls les bords de la fenêtre sont "skinnés", les contrôles (boutons, etc) ne le sont pas sauf mon richedit qui est là comme un blaireau avec les thèmes XP... et IsAppThemed renvoie TRUE, même dans ce contexte.

Voici comment je gère :
  case WM_THEMECHANGED:
    if (hTheme != NULL) {
      pCloseThemeData(hTheme);
    }
    if (pIsThemeActive != NULL && pIsThemeActive() != 0 && pIsAppThemed() != 0) {
      hTheme = pOpenThemeData(hWnd, L"EDIT");
    } else {
      hTheme = NULL;
    }

Les p*** sont des pointeurs de fonctions sur les fonctions d'uxtheme.dll, ils sont initialisés comme suit :
      pIsThemeActive = (ITA) GetProcAddress(hUxTheme, "IsThemeActive");
      pIsAppThemed = (IAT) GetProcAddress(hUxTheme, "IsAppThemed");
      pOpenThemeData = (OTD) GetProcAddress(hUxTheme, "OpenThemeData");
etc...

Et que l'application intègre ou non un manifest, les richedits se dessinent avec le style XP...
vendredi 7 janvier 2005 à 14:11:08 | Re : Gestion des thèmes XP

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Oui, c'est ce que je dit : sans manifest, ton application utilise quand même les thèmes ne serait-ce que pour la barre de titre de la fenêtre ! Maintenant, si les richedits utilise les API de l'uxtheme.dll pour se tracer, forcément, il se tracera au look XP si le thème est actif, même si l'application n'utilise pas de manifest !

DarK Sidious

[Administrateur et responsable VB/API du site 
ProgOtoP]
vendredi 7 janvier 2005 à 14:36:04 | Re : Gestion des thèmes XP

Nebula

Membre Club
Bon, on va tout récapituler depuis le début...

Avec manifest : http://athanatos.free.fr/temp/RichXP/avec.gif
Sans manifest : http://athanatos.free.fr/temp/RichXP/sans.gif

Ces deux applications utilisent le code que j'ai donné plus haut, la seule différence concerne la présence ou l'absence du manifest dans les ressources. Et ce que je voudrais, c'est savoir comment m'y prendre pour détecter si je dois tracer les richedits avec ou sans les thèmes XP, de manière à assortir leur apparence aux autres composants (comme le montrent les deux screens) que les thèmes soient activés ou non (en fonction des paramètres de l'application et non de Windows). C'est en cela que je pensais utiliser IsThemeActive (global) et IsAppThemed (local), mais çà foire...

Pour le moment, j'utilise uxtheme uniquement si les thèmes XP sont activés, sinon je laisse le richedit faire sa bordure par défaut. Cela fonctionne très bien si l'utilisateur a désactivé les thèmes XP, mais lorsqu'ils sont activés cela ne prend pas en compte le manifest, et voilà tout le problème (sans compter qu'on peut forcer la désactivation des thèmes XP dans le raccourci de l'application, je n'ai pas encore testé çà).

Désolé si je te semble agressif, mais çà commence à m'énerver quelque peu de tourner en rond
vendredi 7 janvier 2005 à 14:47:11 | Re : Gestion des thèmes XP

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Lol, je te comprends !

As-tu essayé la fonction GetWindowTheme ? Car appliqué à ton richtextbox, peut-être qu'il pourrait te donner l'information cherchée...

Sache en plus que le richtextbox n'est pas le seul dans ce cas là : le listbox par exemple ou le textbox classique affichent leurs scrollbar en thème XP alors que leur bordure reste à la norme Win98 ! Et là, ca fait encore plus louche ;)


DarK Sidious

[Administrateur et responsable VB/API du site 
ProgOtoP]

1 2

Cette discussion est classée dans : asp, xp, library, msdn, thèmes


Répondre à ce message

Sujets en rapport avec ce message

RVA [ par AlexMAN ] Bonsoir, J'ai un pb avec le param StreamDirectoryRva de ce lien msdn : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/min Où trouver Dnsapi.lib [ par PRZYBYLSKI ] Bonjour, Je vais poser sûrement une question bête mais je suis débutant dans ce langage. Et sur ce logiciel Visual C++6. Je cherche une librairie « Dn ListView_SetItemPosition32 [ par larion ] Bonjour, Ne maîtrisant pas bien l'anglais (msnd), je n'ai pas compris quelle était la différence entre - ListView_SetItemPosition - ListView_SetItemP RECHERCHE PRO DU COM [ par BruNews ] Salut,on recherche qqn qui saurait faire un plugin IE, une barre d'outils genre GoogleBar, cela pour Codes-Sources. Faut donc s'y connaitre en impleme CRYPTUI.dll et gestion de certificats dans C++ et SDK [ par anix ] Salut,     dans un projet en Visual C++ en relations avec la gestion de certificats,tout va bien (càd en compil et en build) mais en éxécution il y a récupérer le type de partition [ par deck_bsd ] Bonjour à tous,Voila je cherche comment je pourrai récupérer le type de partition d'un volume (Principale, etendue ,...) . Suis-je sur la bonne voi av Fonctionement de SHGetFolderPath [ par Sens0r ] Bonjour,est-ce que quelqu'un pourrait me montrer dans un exemple comment la fonction 'SHGetFolderPath' fonctione?Voici le lien vers la msdn:http://msd keybd_event [ par jereboss188 ] Bonjour à tous,Pour commencer, merci d'avance au personnes qui pourront (ou tenteront de) repondre à ma question.Je développe en C++ un programme pour WM_MOUSEWHEEL et XP [ par Pistol_Pete ] Salut à tous Je cherche à gérer la molette de la souris dans mon application win32. Le message WM_MOUSEWHEEL correspond parfaitement à ce que je veux. Thèmes XP [ par Nebula ] Salut !Je souhaiterais utiliser les thèmes xp avec mes applications, j'ai donc créé un fichier .manifest comme ci-dessous (trouvé sur la msdn, je sais


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 : 0,624 sec (3)

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