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
Source / Exemple :
#include <windows.h>
#include <commctrl.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
//Retrouver le HWND de la ListView du Bureau
//Find the Desktop ListView HWND
HWND Manager = FindWindowEx(0,0,"Progman","Program Manager");
HWND ShellDLL = FindWindowEx(Manager,0,"SHELLDLL_DefView",NULL);
HWND List = FindWindowEx(ShellDLL,NULL,"SysListView32",0);
// Récupérer le style actuel de la ListView
// Get the actual style for ListView
LONG Style = GetWindowLong(List,GWL_STYLE);
// On enlève le style d'affichage dans le style en masquant
// We mask the value of the style in order to del the style view
LONG Mask = LVS_ICON | LVS_SMALLICON | LVS_LIST | LVS_REPORT;
Mask = ~Mask;
Style = Style & Mask;
//On choisi le style d'affichage à appliquer à la liste
//Le style d'origine est LVS_ICON
//We chose the new style view for the ListView
//The default style is LVS_ICON
Style = Style | LVS_SMALLICON;
//On applique le style
//We apply the style
SetWindowLong(List,GWL_STYLE,Style);
//On redonne la transparence à la ListView et
//on change la couleur du texte
//We set the background of the ListView as transparency
//and we change the color text
SendMessage(List,LVM_SETTEXTBKCOLOR,0,CLR_NONE);
SendMessage(List,LVM_SETTEXTCOLOR,0,RGB(255,255,255));
//On met à jour l'affichage du contrôle
//We update the control
InvalidateRect(List,0,TRUE);
return NULL;
}
Conclusion :
Pour rétablir la configuration d'origine, redémarrez votre ordinateur :o) Je plaisante bien entendu, il suffit de changer la ligne :
Style = Style | LVS_SMALLICON;
par
Style = Style | LVS_ICON;
et le tour est joué !
Personnellement j'ai mis ce programme dans une clé de registre HKLM/Software/Microsoft/Windows/Current Version/Run/ afin qu'il démarre automatiquement. Pour les moins expérimentés, un raccourci dans Programme->Démarrage fera amplement l'affaire.
31 mai 2005 à 09:30
Non en faite, j'aime assez ta façon de partir d'une chose, et ta façon d'en conclure !
Genre ta commencer par apercevoir que le bureau c'était qu'une listview, donc les styles possibles etc...
Et rien que pour cette façon d'arriver à tes fins j'vé te mettre une bonne note, lol même si bien évidemment, les icônes sont mieux :) que les listes voyons...
http://membres.lycos.fr/joky/Bureau.JPG
31 mai 2005 à 09:31
J'aurais voulu mettre 8/10 mais marche pas désolé lol
31 mai 2005 à 15:52
31 mai 2005 à 15:59
Grâce à mon bureau on voit tout de suite que jsuis pas mal con quand même :)
Jsuis sous windows, et j'met un style Mac mdr
Ca tue ;)
31 mai 2005 à 18:20
Et en fond, la sublime tarja (je parle de la voix voyons ;-)) du groupe bien sympathique Nightwish (a ne surtout pas écouter quand on doit coder dans l'urgence ...)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.