s@ldon
Messages postés140Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 septembre 20093 30 sept. 2009 à 21:18
En fait, avec les API de Windows, tu peux créer tes propres contrôles (graphique j'entends). Tu peux même leur donner un nom. Du coup quand tu crée un contrôle sur ta fenêtre, ton utilises createWindow mais au lieu de lui spécifier BUTTON,LISTBOX,... comme type tu lui donne le nom de ton contrôle.
Donc, lorsque spy++ ou tout autre programme du même type "scanne" les contrôles d'une fenêtre, il trouve des contrôles de type connus (BUTTON,GROUPBOX,...), il vérifie les contrôles fils. Mais pas sur les objets non standards (objets GTK pour FF, C# certainement pour office, Qt pour VLC,...).
Il me semble même que en faisant du subclassing, tu peux en interceptant le bon message, modifier le retour des contrôles fils et renvoyer une liste bidon ou cacher certains composants.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 3 oct. 2009 à 17:36
Salut,
_Jonathan -> Attention, spy++ et autres détectent très bien les contrôles utilisant des classes perso (RegisterClassEx). Ils ne se limitent pas du tout aux classes de base (Boutons et autres).
C'est surtout que c'est des "composants" qui ne sont pas des fenêtres au sens Windows du terme (Pas créés avec CreateWindowEx). Dans ces cas là, les logiciel dessinent leurs composants à la main. Windows n'a pas du tout conscience de ces composant, il ne connait que la fenêtre qui les contient.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 5 oct. 2009 à 10:44
Cela permet un meilleur contrôle sur les composants de la part de la librairie graphique.
Par exemple, en java, on peut relativement facilement mettre des combobox comme colonne d'une listview. Permettre cette possibilité dans une listview windows aurait été plus complexe.
Et ça peut aider au niveau de la mise en place d'une gestion de thèmes d'interface perso, du redimensionnement dynamique...
Cela permet aussi de factoriser du code : on va utiliser le même code pour un composant qu'il soit sous linux ou windows : seule la partie dessin sera du code spécifique à une plateforme.
Mais les gains sont effectivement limités... Les composants personnalisés sont rarement intuitifs et déroutent souvent l'utilisateur très habitué avec les composants classiques windows.