Question

J'essaie d'appeler OpenThemeData (voir msdn OpenThemeData ), mais je n’ai pas pu déterminer quels sont les noms de classe acceptables à transmettre par le paramètre pszClassList .

HTHEME OpenThemeData(      
    HWND hwnd,
    LPCWSTR pszClassList
);

Quelqu'un pourrait-il me dire quels sont les noms de classe acceptables que je peux transmettre dans ce paramètre? Merci!

Était-ce utile?

La solution

Vous pouvez rechercher dans " AeroStyle.xml " comme l'a noté une affiche précédente, qui donne une liste exacte de Vista / Aero. Toutefois, si vous voulez jouer en toute sécurité (et vous le faites probablement), les noms de classe doivent généralement être les noms de classe Windows des contrôles communs Windows. Par exemple, les boutons poussoirs et les cases à cocher utilisent le nom de classe "Bouton", le contrôle d'édition "Edition", etc. Je sélectionne généralement le nom de classe du contrôle le plus proche de l'élément personnalisé sur lequel je travaille, et utilisez les données de thème pour cela. Ainsi, vous obtiendrez un code compatible avec XP, Vista et (espérons-le) Windows 7, quel que soit le thème sélectionné par l'utilisateur.

Cependant, à moins que vous utilisiez beaucoup Win32 brut, vous ne ferez probablement pas beaucoup de contrôles en utilisant directement le nom de la classe. Les noms de classe sont dispersés assez généreusement dans MSDN. Un bon point de départ est généralement le " CommCtrl.h " fichier du Kit de développement Platform SDK, qui en contient beaucoup, et ils sont toujours décrits dans l'aide de MSDN sur les contrôles communs individuels. Vous pouvez aussi souvent les apprendre en regardant comment les dialogues sont définis dans les fichiers .rc en les ouvrant dans un éditeur de texte: ils contiennent le nom de la classe pour les contrôles.

Autres conseils

L'article Pièces et Les états sur MSDN contiennent un tableau indiquant les classes de contrôle , les parties et les états . Les valeurs de la table sont définies dans Vsstyle.h et Vssym32.h .

Voici une référence rapide:

BUTTON, CLOCK, COMBOBOX, COMMUNICATIONS, CONTROLPANEL, DATEPICKER, DRAGDROP, 
EDIT, EXPLORERBAR, FLYOUT, GLOBALS, HEADER, LISTBOX, LISTVIEW, MENU, MENUBAND, 
NAVIGATION, PAGE, PROGRESS, REBAR, SCROLLBAR, SEARCHEDITBOX, SPIN, STARTPANEL, 
STATUS, TAB, TASKBAND, TASKBAR, TASKDIALOG, TEXTSTYLE, TOOLBAR, TOOLTIP, 
TRACKBAR, TRAYNOTIFY, TREEVIEW, WINDOW

La réponse à la question thèmes visuels Windows: Gallery of Parts and States? fournit une application "Parts and States Explorer" dans laquelle vous pouvez parcourir et tester la plupart des styles.

Les noms de classe dépendent du thème. Par exemple, en tant que documentation pour les OpenThemeData :

  

Les noms de classe pour le thème Aero sont   défini dans AeroStyle.xml, qui est   trouvé dans le dossier Include du   Développement logiciel Microsoft Windows   Kit (SDK).

Je sais que la question est ancienne, mais je souhaite donner une réponse actualisée (2018) à ceux qui viennent ici de Google.

La réponse acceptée de DavidK indique de rechercher dans le fichier " AeroStyle.xml ". où les thèmes sont définis. Ce fichier faisait partie du SDK Windows 7, mais a été supprimé du SDK Windows 10; la réponse acceptée n'est donc plus utile.

La réponse des liens splash au MSDN où la liste des noms de thèmes, des parties et des états est extrêmement incompétente et non mise à jour.

Les thèmes sont dessinés par UxTheme.dll , qui lit les images et les couleurs, etc., à partir du fichier aero.msstyles dans le dossier C: \ Windows. \ Resources \ Themes \ Aero sur Windows 10.

Mais lorsque vous ouvrez ce fichier dans un éditeur hexadécimal, vous ne trouverez pas les noms de tous les thèmes. Je ne sais pas s'il existe un moyen d'énumérer tous les noms de classe de thème existants pouvant être passés à OpenThemeData () . Je suppose que ce n’est pas possible.

Mais ce dont je suis sûr, c’est que dans Windows 10 build 18282, Microsoft a supprimé le thème " Horloge ". qui n’est plus utilisé et de nombreux thèmes non documentés ont été ajoutés, comme par exemple: " TaskBand2CompositedSmallIconsVertical8Light :: Taskband2 " qui est passé comme nom de classe de thème à OpenThemeData () .

Et je sais aussi que plusieurs thèmes ne peuvent être obtenus que si vous passez le bon descripteur de fenêtre. Si vous passez le descripteur de la mauvaise fenêtre, vous risquez d'obtenir un autre descripteur de thème que prévu, voire NULL .

Je sais aussi que Microsoft a, au cours des 2 dernières années, modifié en interne tout son code pour qu'il utilise OpenThemeDataForDpi () au lieu de OpenThemeData () , car chaque moniteur de Windows 10 peut avoir une résolution différente.

Le problème que nous avons ici est un grave manque de documentation dans le MSDN et l'absence d'une fonction API permettant d'énumérer tous les thèmes disponibles.

Cela n’a rien à voir avec Aero, qui n’existe même pas sous XP! Voir le code source de OpenThemeData () ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top