OVH Cloud OVH Cloud

barre de titre

9 réponses
Avatar
marc
Bonjour à tous,
Je voudrais savoir s'il est possible de modifier la couleur de la barre de
titre dans un programme win32 et bien entendu seulement pour mon programme
et non pour l'ensemble des fenêtres du système comme le ferait
SetSysColors(...).
C'est une demande d'un client qui veut un aspect différent !
Marc.

9 réponses

Avatar
Arnold McDonald \(AMcD\)
marc wrote:
Bonjour à tous,
Je voudrais savoir s'il est possible de modifier la couleur de la
barre de titre dans un programme win32 et bien entendu seulement pour
mon programme et non pour l'ensemble des fenêtres du système comme le
ferait SetSysColors(...).



Il y a au moins la méthode de redessiner toi-même la barre de titre. En
fait, il te faut gérer toi-même le dessin de ta fenêtre. Je te le dis, c'est
assez caase-pieds à mettre au point. Regarde du côté de WM_NCACTIVATE,
WM_NCCREATE etc. Cherche des urls sur le dessin des zones non clients des
fenêtres quoi (Non Client, le NC des messages ci-dessus). Je te préviens,
c'est chiant à mettre au point....

C'est une demande d'un client qui veut un aspect différent !



T'aurai pas du écrire ça, sinon, je vais demander un tarif :-).

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/
Avatar
marc
"Arnold McDonald (AMcD)" a écrit dans le message de
news: 43b27d10$0$30418$
marc wrote:
Bonjour à tous,
Je voudrais savoir s'il est possible de modifier la couleur de la
barre de titre dans un programme win32 et bien entendu seulement pour
mon programme et non pour l'ensemble des fenêtres du système comme le
ferait SetSysColors(...).



Il y a au moins la méthode de redessiner toi-même la barre de titre. En
fait, il te faut gérer toi-même le dessin de ta fenêtre. Je te le dis,
c'est assez caase-pieds à mettre au point. Regarde du côté de
WM_NCACTIVATE, WM_NCCREATE etc. Cherche des urls sur le dessin des zones
non clients des fenêtres quoi (Non Client, le NC des messages ci-dessus).
Je te préviens, c'est chiant à mettre au point....

C'est une demande d'un client qui veut un aspect différent !



T'aurai pas du écrire ça, sinon, je vais demander un tarif :-).

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/




OK merci.Je vais regarder cela de plus près et en plus c'est un bonus pour
le client, je ne peux plus lui facturer cela !!.
Si c'est trop "long" à faire il restera avec la barre classique !
Marc.
Avatar
Christian ASTOR
marc wrote:

OK merci.Je vais regarder cela de plus près et en plus c'est un bonus pour
le client, je ne peux plus lui facturer cela !!.
Si c'est trop "long" à faire il restera avec la barre classique !
Marc.



C'était en fait relativement "simple" à faire avant XP et les thèmes...
Le plus facile maintenant est de faire comme WinAmp (supprimer
WS_CAPTION et la dessiner soi-même)
Avatar
Arnold McDonald \(AMcD\)
Christian ASTOR wrote:

C'était en fait relativement "simple" à faire avant XP et les
thèmes... Le plus facile maintenant est de faire comme WinAmp
(supprimer WS_CAPTION et la dessiner soi-même)



Relativement... j'aime bien ! Pour l'avoir fait, c'était pas évident du
tout. Faut pas rêver, faut gérer une bonne moitié des messages WM_NCXXX et
encore, suivant les versions des OS de Microsoft, fallait retoucher le code.
Et que fallait virer le WS_VIBLE avec W2K, mais temporairement avec 98, et
sous-classer en plus pour W95, etc. etc. Vraiment pas évident du tout.
D'ailleurs, beaucoup redessinaient pas et usaient de bitmaps plutôt. Déjà
WM_NCCALCSIZE c'est pas intuitif au premier abord.

Et puis, depuis les thèmes de XP, faut être fou pour seulement avoir l'idée
d'essayer de faire un truc portable :-).

C'est du boulot avant d'arriver à un truc complet (genre menu de barre de
titre, gestion du déplacement de la fenêtre à la souris, etc.) et stable
(qui fonctionne thèmes ou pas).

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/
Avatar
Bertrand Lenoir-Welter
AMcD:

C'est du boulot avant d'arriver à un truc complet (genre menu de barre de
titre, gestion du déplacement de la fenêtre à la souris, etc.) et stable
(qui fonctionne thèmes ou pas).



Tiens, j'ai fait ça une seule fois dans ma vie, l'année dernière, et ça
m'a pourtant pas paru la mer à boire. En fait, ma fenêtre était une
bitmap (rectangulaire donc, mais la barre de titre changeait de couleurs
avec le focus grâce à une autre bitmap large et fine), et ces bitmaps
comprenaient tout : titre, icones en haut à droite de
réduction/fermeture (pas d'agrandissement, oeuf corse). Le déplacement
de la fenêtre à partir de la barre de titre ne m'a pas posé le moindre
problème. Suffit de lire les messages souris ad hoc et la capturer puis
MoveWindow() le long du trajet, enfin la libérer à la fin. Donc
rafraîchissement permanent. Quant au menu système à gauche, ça se fait
tout seul (ouais, dans la langue du soft, pas du système). Bref, ça
marchait tout seul et ça n'a pas demandé beaucoup de code. J'utilisais
pourtant un très vieux compilo (Borland C++ 5.02).

Les thèmes de XP étaient donc sans objet.

Ou bien j'ai raté quelque chose ?
Avatar
marc
"Bertrand Lenoir-Welter" a écrit dans le message
de news: 43b3a1d7$0$18335$
AMcD:

C'est du boulot avant d'arriver à un truc complet (genre menu de barre de
titre, gestion du déplacement de la fenêtre à la souris, etc.) et stable
(qui fonctionne thèmes ou pas).



Tiens, j'ai fait ça une seule fois dans ma vie, l'année dernière, et ça
m'a pourtant pas paru la mer à boire. En fait, ma fenêtre était une bitmap
(rectangulaire donc, mais la barre de titre changeait de couleurs avec le
focus grâce à une autre bitmap large et fine), et ces bitmaps comprenaient
tout : titre, icones en haut à droite de réduction/fermeture (pas
d'agrandissement, oeuf corse). Le déplacement de la fenêtre à partir de la
barre de titre ne m'a pas posé le moindre problème. Suffit de lire les
messages souris ad hoc et la capturer puis MoveWindow() le long du trajet,
enfin la libérer à la fin. Donc rafraîchissement permanent. Quant au menu
système à gauche, ça se fait tout seul (ouais, dans la langue du soft, pas
du système). Bref, ça marchait tout seul et ça n'a pas demandé beaucoup de
code. J'utilisais pourtant un très vieux compilo (Borland C++ 5.02).

Les thèmes de XP étaient donc sans objet.

Ou bien j'ai raté quelque chose ?



Je vais faire un essai (sous XP) ce week-end pour voir ce que cela donne.
Marc.
Avatar
Arnold McDonald \(AMcD\)
Bertrand Lenoir-Welter wrote:
AMcD:



Tiens, j'ai fait ça une seule fois dans ma vie, l'année dernière, et
ça m'a pourtant pas paru la mer à boire. En fait, ma fenêtre était une
bitmap (rectangulaire donc, mais la barre de titre changeait de
couleurs avec le focus grâce à une autre bitmap large et fine), et
ces bitmaps comprenaient tout : titre, icones en haut à droite de
réduction/fermeture (pas d'agrandissement, oeuf corse).



Eh oui. Lis bien ce que j'ai écris. Si tu passes par des bitmaps, c'est bien
plus simple et c'est la méthode qui est la plus utilisée. Mais la vrai
méthode, quand tu redessines la barre de titre à ta façon, c'est de gérer
son comportement comme toute fenêtre de Windows officielle, c'est à dire
gestion de l'agrandissement, iconisation, prise en compte si les styles XP
sont activés ou pas, taille de la police du titre comme elle est réglée sur
le système (ça fait tâche si le système affiche le stitre en Arial 36 et que
ta fenêtre est en Times 12), gestion de l'activation, déplacement avec
affichage de la fenêtre si cette option est activée, etc. Déjà chaque bouton
à la XP c'est 6 bitmaps chaque si j'ai bonne mémoire...

Le déplacement
de la fenêtre à partir de la barre de titre ne m'a pas posé le moindre
problème. Suffit de lire les messages souris ad hoc et la capturer
puis MoveWindow() le long du trajet, enfin la libérer à la fin.



Et si l'option afficher le contenu lors du déplacement est activée ?

Ou bien j'ai raté quelque chose ?



Heu, je pense :-). Si tu dessine tout toi-même, passer par un bitmap,
quelques detections de souris sur les zones de tes boutons et zou, oui c'est
jouable assez rapidement. Mais une gestion exacte à celle des autres
fenêtres de Windows, ben pour une fois, au moins pour une fois ;-), je dis
que c'est sacrément chiant à faire !

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/
Avatar
Bertrand Lenoir-Welter
AMcD:

Et si l'option afficher le contenu lors du déplacement est activée ?



Ben c'est dans ce cas que c'est facile : MoveWindow() avec
bRepaint=TRUE. Si c'est désactivé, j'ai pas essayé d'afficher le fantôme
sur le bureau, mais je suppose que ça doit pouvoir se faire avec un
DesktopDC ou dans le genre.

La plupart des softs qui ont leur propre look indépendant de Windows -
en tout cas ceux que j'ai ici - affichent le contenu même lorsque
l'option est désactivée. Probablement parce que c'est plus simple,
d'ailleurs : on a pas à se palucher un DC spécifique pour dessiner hors
fenêtre.


Mais une gestion exacte à celle des autres
fenêtres de Windows, ben pour une fois, au moins pour une fois ;-), je dis
que c'est sacrément chiant à faire !



Bah, j'envisage même pas d'essayer. Me faire suer le burnous juste pour
pouvoir présenter une barre de titre d'une couleur personnalisée pour le
bon plaisir d'un client ? Sans déconner...

Question stupide, au fait : suffit pas de choper le message ad hoc
(focus, paint) et ajouter SetSysColor() juste avant et juste après avec
les bonnes valeurs ?
Avatar
Arnold McDonald \(AMcD\)
Bref, c'est pas simple quoi :-).

Pousr SetSysColor(), si j'ai bonne mémoire, ça marchait pas.

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/