Bonjour à tous et à toutes !
Qui n'a jamais eu l'impression que son Bureau Windows était un véritable Capharnaüm ?
Qui n'en n'a jamais eu marre de rechercher 5 minutes son icône parmi les 50 autres sur le Bureau ?
En utilisant Spy++, j'ai vu que le bureau n'est en fait qu'un simple contrôle de liste (class "SysListView32").
Les ListViews possèdent plusieurs style (avec leur équivalent d'affichage dans l'Explorateur Windows):
LVS_ICON (équivalent "Icône")
LVS_SMALLICON (équivalent "Icône" mais avec de petites images)
LVS_LIST (équivalent "Liste")
LVS_REPORT (équivalent "Détail")
Par défaut le bureau de Windows est à LVS_ICON.
Mon idée est toute simple, je souhaiterais que les icônes du bureau soient plus petite mais que nous gardions le glisser déplacer.
Nous devons donc utiliser le style LVS_SMALLICON.
Maintenant que nous savons ce que nous voulons faire, voici les étapes nécessaires pour réussir à changer le bureau
1 - Retrouver le HWND de la fenêtre ListView
2 - Changer son style
1 - Retrouver le HWND de la fenêtre ListView
Nous allons utiliser l'API FindWindowEx pour parvenir à nos fins...
En examinant Spy++, on voit que le contrôle ListView est un enfant de "SHELLDLL_DefView" qui lui même est enfant de "Program".
Ca parait difficile mais ce n'est que 3 lignes de code....
2 - Changer le style de la ListView
On utilisera l'API GetWindowLong (ou GetWindowLongPtr pour se préparer aux 64bits) pour récupérer le style du contrôle via le paramètre GWL_STYLE.
Puis, en appliquant un masque sur le style courant, on va pouvoir retirer le style d'affichage et garder les autres styles qui 'n’ont pas forcément de rapport avec notre but.
On validera le nouveau style avec la fonction SetWindowLong.
3 - Transparence !
Ca a failli être terminé !
Il manque néanmoins la transparence de la liste qui vous permettra de conserver le top model en fond d'écran intact ^^.
Pour cela il faut envoyer les messages :
- LVM_SETTEXTBKCOLOR (Brush à CLR_NONE) - permet de garder le fond de la liste transparent
- LVM_SETTEXTCOLOR (couleur blanche de préférence, à customiser !) - change la couleur du texte
Pour terminer, une mise à jour visuelle du contrôle, ça ne coûte pas plus cher avec la fonction InvalidateRect.
Voilà, vous êtes maintenant prêts à avoir un bureau que tous vos collègues vous envieront 8).
Je vous invite à jouer sur la couleur de la police (LVM_SETTEXTCOLOR) ou éventuellement rendre le contrôle transparent (sujet probablement traité dans les colonnes de cppfrance).
Bon développement ^^
Poppyto
http://www.poppyto.net