cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 2007
-
7 janv. 2005 à 02:39
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 2007
-
9 janv. 2005 à 07:23
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...
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 ?
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 9 janv. 2005 à 07:23
Bon, j'ai finalement trouvé... Il "suffit" de vérifier la version de
comctl32.dll mappée dans notre processus : avec un manifest on a la
version 6 ou plus, sans manifest on a la version 5.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 7 janv. 2005 à 07:42
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]
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 7 janv. 2005 à 13:11
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]
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 7 janv. 2005 à 14:01
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.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 7 janv. 2005 à 14:11
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]
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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 7 janv. 2005 à 14:47
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]
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 7 janv. 2005 à 14:57
Hum je ne pense pas que
GetWindowTheme
puisse grand chose pour moi, je stocke déjà le HTHEME dans une variable
statique pour conserver le retour de OpenThemeData. D'ailleurs c'était
sur cette fonction que je me basais avant pour savoir si les thèmes
étaient actifs : elle retourne NULL s'ils ne le sont pas, sauf dans le
cas d'un manifest (encore lui)...
Quand aux listbox/textbox, ils prennent les styles XP lorsque j'inclus
un manifest, seuls les richedits (toutes versions) semblent n'en faire
qu'à leur tête