bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 2007
-
3 janv. 2005 à 20:42
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
4 janv. 2005 à 21:15
Bonjour,
J'utilise la fonction suivante : SetSysColors
avec comme paramètre COLOR_BACKGROUND
afin de changer la couleur de fond du bureau et à chaque fois cela semble avoir des impacts sur les fenètres ouvertes : typiquement je suis en édition sur une propriété d'un contrôle (en mode design, sous VS.net et en pleine écran) et hop dès que SetSysColors() se déclenche, mon écran fait un petit clignotement, et je sors du mode édition : c'est particulièrement pénible.
Est-ce que SetSysColors envoie des sorte de message de mise à jour aux fenètres autres que le bureau ? Est-ce que qqn a une idée, parce moi je sèche ...
Merci.
Cordialement.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 3 janv. 2005 à 20:53
Description de SetSysColors
SetSysColors changes the system colors used by Windows. Windows uses these colors when displaying the typical widgets such as title bars, scroll bars, the desktop, menus, etc. This function can set multiple different system colors simultaneously, by passing all the new RGB color values in an array. SetSysColors also notifies all windows of the change, so the color change takes effect immediately. However, the new colors are not saved after Windows shuts down.
bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 20074 3 janv. 2005 à 21:38
Arf . ... Merci pour la réponse (et la rapidité). Bon, je comprends mieux maintenant : MS aurait pu filtrer les messges dans certains cas comme celui de COLOR_BACKGROUND
qui ne concerne pas vraiment les autres fenètres, mais bon, faut faire avec ....
Est-ce que quelqu'un à une idée pour modifier la couleur de fond du bureau sans avoir a utiliser cette fonction (pour que je n'ai pas ce problème) ?
avec DATA.COLOR_BACKGROUND = 1;
C'est justement cette fonction qui pose problème pour la raison indiqué par Bidou (elle informe toutes les fenètres par message).
C'est pourquoi je cherche plutôt un autre moyen ... qui n'utilise pas SetSysColors() car je veux éviter que les autres fenètres soient informer d'un changement qui ne les concerne pas et qui surtout pertube l'utilisateur.
a+
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 4 janv. 2005 à 10:16
Tu as essayer de changer le fond par une image ?(SystemParametersInfo SPI_SETDESKWALLPAPER)
Au pire des cas il faudrais utiliser un hook global pour bloquer le message WM_SYSCOLORCHANGE.
bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 20074 4 janv. 2005 à 20:35
Merci pour les infos.
Pour SystemParametersInfo SPI_SETDESKWALLPAPER, cela permet de changer le fond d'écran : mais ici, je souhaite précisément modifier la couleur de fond sans affecter l'image actuellement affichée.
Pour le hook global, je ne connais pas : J'ai trouvé qqc sur SetWindowsHookEx : S'agit-il de cela (avec le paramètre WH_CALLWNDPROC ?) ? Si c'est ça, comment je fais pour rendre global le hook ?
Merci en tout cas pour l'aide.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 4 janv. 2005 à 21:15
Pour l'instant tu sera forcement obligé de passer par une dll "native" (C/C++...) pour faire un hook global.
Mais, après reflexion je me demande si c'est vraiment une bonne idée, c'est peut être un peu lourd pour cette situation