Afficher le thème XP (sous XP) pour une vielle APP

Afficher le thème XP (sous XP) pour une vielle APP - C++ - Programmation

Marsh Posté le 21-08-2012 à 20:05:39    

Bonjour à tous,
 
Je souhaiterai donner une apparence un peut plus agréable à une veille application qui sert à piloter une machine.
Elle semble être écrite en C++ 5.0 et je n'ai pas accès au code source.
J'ai donc ajouté le fichier manifeste suivant dans le répertoire de l'exécutable :
Code :
 
<?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="*"
    name="Vieux.Prog.XP"
    type="win32"
/>
<description>Usinage</description>
<dependency>
 <dependentAssembly>
  <assemblyIdentity
   type="win32"
   name="Microsoft.Windows.Common-Controls"
   version="6.0.0.0"
   processorArchitecture="*"
   publicKeyToken="6595b64144ccf1df"
   language="*"
  />
 </dependentAssembly>
</dependency>
</assembly>
 
Sous Vista, cela fonctionne parfaitement. Le style est affiché dans toutes les conditions. En revanche, sous XP (sp3), les boutons qui possèdent une image sont affichés en style classique.
 
Quelqu'un a-t-il une idée de ce sur quoi il faut agir ?
 
Merci d'avance pour votre aide :)


Message édité par Scuriolus le 13-07-2013 à 10:48:04
Reply

Marsh Posté le 21-08-2012 à 20:05:39   

Reply

Marsh Posté le 23-08-2012 à 19:14:26    

Hmm, c'est probablement dû à une limitation de XP. L'icône sur le bouton a probablement été rajouté en utilisant ce message :
 
http://msdn.microsoft.com/en-us/li [...] v=vs.85%29
 
La dll common control v6 de XP utilise le style classique pour dessiner le bouton (même si les styles personalisés sont activés). Pour utiliser le style personnalisé avec icône, il aurait fallu utiliser ce message : (edit: tu peux d'ailleurs voir que les boutons dans les coins utilisent bien le style personnalisé)
 
http://msdn.microsoft.com/en-us/li [...] v=vs.85%29
 
Vu que tu n'as pas le code, il n'y a probablement pas grand chose que tu puisses faire ....


Message édité par tpierron le 23-08-2012 à 19:15:49
Reply

Marsh Posté le 24-08-2012 à 11:14:02    

Bonjour Tpierron, et merci pour ta réponse,
 
De ce que je peux voir dans le code désassemblé, il semble bien utiliser BM_SETIMAGE (des fois avec IMAGE_BITMAP d'autres avec IMAGE_ICON).
 
Effectivement, à voir aussi les discutions sur les forums de programmation, l'ajout d'une image sur un bouton de style XP ne se fait pas simplement.
 
Comme Vista arrive à l'afficher correctement, est-ce qu'il est possible d'ajouter quelque chose dans le manifeste pour qu'XP utilise une DLL plus récente, ou je ne sais quoi, qui lui permettrait de passer cette limite ?

Reply

Marsh Posté le 24-08-2012 à 15:18:47    

Scuriolus a écrit :

Comme Vista arrive à l'afficher correctement, est-ce qu'il est possible d'ajouter quelque chose dans le manifeste pour qu'XP utilise une DLL plus récente, ou je ne sais quoi, qui lui permettrait de passer cette limite ?


 
Non, je pense qu'il n'y a pas grand chose que tu puisses faire à ce niveau. Les common controls ont une architecture à la con : il y a une partie utilisateur et une partie noyau. La partie utilisateur ne fait que l'interface avec le noyau (c'est pour ça que la DLL est minuscule). L'interaction/rendu est faite en grande partie dans le noyau. Donc simplement remplacer la DLL comctl32.dll ne suffira probablement pas, et ça va être d'autant plus la merde, que cette DLL est installé via Windows Side by Side (il n'existe évidemment aucun installeur officiel pour cette DLL).
 
Je suis aussi pratiquement sûr que même la DLL uxtheme.dll est incapable de corriger ce problème. Il doit y avoir un morceau de logique qui manque dans la gestion interne des boutons avec un BM_SETIMAGE.
 
Pour m'être battu pendant trop longtemps avec cette DLL, ça ne me surprends qu'à moitié cela dit...

Reply

Marsh Posté le 24-08-2012 à 22:06:07    

Merci pour ta réponse éclairée.
Je vais malheureusement laisser tomber cette idée d’embellissement et rester avec cette vielle interface grisonnante, c'est dommage  :(  
 
Merci pour ton aide  :)  

Reply

Marsh Posté le 25-08-2012 à 18:46:31    

C'est peut être (sûrement?) une grosse connerie qui demanderait beaucoup trop de boulot mais y aurait il moyen d'injecter une dll qui subclasserait les bouton pour les faire s'afficher de la bonne façon?
http://msdn.microsoft.com/en-us/li [...] 85%29.aspx


---------------
Seul Google le sait...
Reply

Marsh Posté le 31-08-2012 à 12:14:16    

Merci pour l'idée mais cela me semble top compliqué pour mon niveau.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed