1

Hello tous hehe
Je me demandais comment faire des contrôles aux styles personnalisés, alors j'ai testé avec un bouton ownerdrawn, et hop super ça marche. Bon après y'a un certain nombres de contrôles qui permettent cela... et une pétée qui ne le permettent pas!
Je me demandais - par exemple - comment skinner une scrollbar, une checkbox, des onglets, ou tout contrôle qui n'a pas de style ownerdraw.
Aussi, je remarque par exemple qu'un EditBox peut contenir des scrollbars. Ces scrollbars, il semble impossible de les dessiner soi-même, ni même d'obtenir un hWnd vers elles, afin de les sousclasser et de les modifier. Si je vais avec Spy++, je ne vois que le contrôle (par exemple IEClientContainer ou je sais pas quoi) mais pas les objets qui se trouvent à l'intérieur (enfants), contrairement à une fenêtre normale.
Auriez-vous des solutions pour faire ça? Je n'aimerais pas implémenter les contrôles moi-même vu que c'est une application qui doit rester standard (à part pour le look), et que par exemple certains logiciels effectuent des opérations internes assez bizarres, comme le VAIO d'un pote pour déplacer une scrollbar (il place la souris au milieu et la fait descendre lui-même, mon contrôle non-standard ne supporterait pas ça je pense).
Merci infiniment d'avance smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

2

Hmm en fait les scrollbars c'est un cas à part...
Tu as scrollbar le contrôle...
Tu as scrollbar une partie de la fenêtre... (au même titre que la barre de titre, l'icône et le menu système, les boutons agrandir/réduire...)
Les uns ont un handle bien a eux, les autres non... Des contrôles windowless en fait, mais comme ça fait longtemps que je me suis intéressé à ça je ne garantis pas cette information tongue
Pour les contrôles standards, une simple surcharge doit suffire si je ne me trompe pas...
En revanche je ne me souviens plus du tout de la méthode a utiliser pour les parties de fenêtre :/
A l'époque où je m'intéressais pas mal a la bidouille sous windows j'avais trouvé un excellent site que je pense avoir retrouvé, mais il n'y a plus ce que je pensais y trouver, ou bien j'ai mal regardé :/
Je te donne quand même l'adresse pour que tu ailles regarder par toi même fleche www.catch22.net
Il y a toujours des trucs très intéressant (je bookmark cette fois-ci tongue) mais pas tous ceux dont je me souvenais hélas... :/
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

Faut sur ou sous classer tes controles via setwindowlong.

4

Merci pour le site GoldenCrystal smile
Le surclassement fonctionne bien pour un bouton (par exemple), mais il est inutile pour une scrollbar (par exemple). Le truc c'est que la scrollbar quand elle reçoit des wm_mousemove / wm_lbuttondown, etc. elle les gère elle-même, et elle dessine la scrollbar à l'intérieur de ces handlers!
C'est débile, je peux rien faire pour dessiner ma propre scrollbar sans avoir un clignotement de l'autre en-dessous. Bon vous me direz y'a les flat scrollbars, mais c'est pas le seul contrôle qui embête ^^
Donc apparemment je suis obligé de dessiner moi-même mes contrôles, perdant du coup leur "standardibilité" (c'est là où ça m'embête)?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

5

une scrollbar peut se redessiner via les mechanismes de sous classements ou sur classements notamment avec wm_drawitem. C'est qu'une fenetre pour windows. J'en suis sur car un groupe de l'avais utiliser dans son installer. Pour eviter le clignotement tu peux eventuellement utiliser l'invalidation des zones perdues via un invaliderect ou bien de tps a autre en modifiant le retour du message WM_ERASEBKGND en retournant TUE ou 1.

6

Brunni > Oué voilà c'était ça le problème avec les scrollbars :/
Alors peut-être que le problème venait uniquement de SetScrollPos (dans ce cas, il te "suffit" de le surcharger a l'aide de l'api detours et ça te permettra de dessiner tes scrollbars comme tu le veux, sinon je ne me souviens plus de la solutions sans detours tongue)
Sinon, tu peux éventuellement tenter de redéfinir tous les messages des barres de défilement toi même, ce qui te donnera un résultat totalement correct, mais sera plus complexe a faire (c'est pas très difficile, mais bon :/ )
Mais a mon avis, surcharger toi-même GetScrollPos et SetScrollPos en plus du dessin de la barre devrait être suffisant... (Quand au dessin dans SetScrollPos, ceci a été fait pour des raisons bien particulières et je te conseille d'imiter ce fonctionnement dans ta surcharge)
Je pense que ça t'oblige a trouver un emplacement de stockage pour les informations des barres de défilement, comme une propriété de la fenêtre. Evidemment ce n'est pas très propre, mais si jamais tu ne trouve pas comment faire sans, ça devrait très bien fonctionner.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes