Bonjour,
Je voudrais créer des fenêtres ayant les mêmes bordures de fenêtres que celle de Windows Live Messenger.
Si ma question est trop spécifique vous pouvez toujours m'aiguiller vers la customisation de fenêtre.
Merci.
Bonjour,
Je voudrais créer des fenêtres ayant les mêmes bordures de fenêtres que celle de Windows Live Messenger.
Si ma question est trop spécifique vous pouvez toujours m'aiguiller vers la customisation de fenêtre.
Merci.
Je peux me tromper mais j'ai surtout l'impression que les bordures de la fenêtre LIVE Messenger sont cachés par défaut au profit d'un PAINT un peu bleuté sur la fenêtre...
Ce qui est confirmé par l'option Afficher la barre de menus que tu trouveras dans le petit bouton avec la flèche vers le bas.
Donc je parierais plus sur du dessin sur evenement PAINT à l'intérieur de la zone cliente
intéressant, mais comment fait-on pour cacher les bordures sans cacher la barre de titres?
tu pourrais essayer un truc du genre :
Ca le fait bien sauf qu'au niveau du redraw.. ca "flick" un peu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Pour masquer : FormBorderStyle = FormBorderStyle.None; int x = Location.X + SystemInformation.BorderSize.Width + 2; int y = Location.Y + SystemInformation.CaptionHeight + SystemInformation.BorderSize.Height + 3; Location = new Point(x, y); et pour afficher : FormBorderStyle = FormBorderStyle.Sizable; int x = Location.X - SystemInformation.BorderSize.Width - 2; int y = Location.Y - (SystemInformation.CaptionHeight + SystemInformation.BorderSize.Height + 3); Location = new Point(x, y);
un petit complément
Pour "masquer la barre de caption" :
je fais ca :
et pour la remettre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 LockWindowUpdate(this.Handle); FormBorderStyle = FormBorderStyle.None; int x = Location.X + SystemInformation.BorderSize.Width + 2; int y = Location.Y + SystemInformation.CaptionHeight + SystemInformation.BorderSize.Height + 3; Location = new Point(x, y); LockWindowUpdate(IntPtr.Zero);
Evidemment, il faudrait juste rajouter le fait de "refuser" l'activation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 LockWindowUpdate(this.Handle); int x = Location.X - SystemInformation.BorderSize.Width - 2; int y = Location.Y - (SystemInformation.CaptionHeight + SystemInformation.BorderSize.Height + 3); Location = new Point(x, y); FormBorderStyle = FormBorderStyle.Sizable; LockWindowUpdate(IntPtr.Zero);
si on est déja en mode "no caption".. (histoire d'éviter d'avoir sa fenetre
qui descend
Heureux ?
The Monz, TOulouse
En mettant une checbox de "basculement", ca ferait cela :
Allez, promis, j'arrete là
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (FormBorderStyle == FormBorderStyle.None) { LockWindowUpdate(this.Handle); int x = Location.X - SystemInformation.BorderSize.Width - 2; int y = Location.Y - (SystemInformation.CaptionHeight + SystemInformation.BorderSize.Height + 3); Location = new Point(x, y); FormBorderStyle = FormBorderStyle.Sizable; LockWindowUpdate(IntPtr.Zero); } else if (FormBorderStyle == FormBorderStyle.Sizable) { LockWindowUpdate(this.Handle); FormBorderStyle = FormBorderStyle.None; int x = Location.X + SystemInformation.BorderSize.Width + 2; int y = Location.Y + SystemInformation.CaptionHeight + SystemInformation.BorderSize.Height + 3; Location = new Point(x, y); LockWindowUpdate(IntPtr.Zero); } }
The Monz, Toulouse
Vraiment merci!
Promis je ferais des retours!
derniere précision...
SI tu as un menu dans ta form, il faut penser à le cacher.. (genre menuStrip1.Visible = false)
et à changer la taille de ta fenetre... pour enlever la "hauteur du menu"
Ce genre d'info sont souvent disponible dans la classe SystemInformation...
(une vraie "mine d'or" cette classe d'ailleurs
The Monz, Toulouse
Bonjour, un petit update de ce thread...
J'ai reflechi un peu plus longuement au problème hier soir (environ 3 minutes pour etre précis) et j'ai réussi à faire quelque chose de similaire à msn..
La technique, simple :
Utiliser 2 fenetres.
La premiere sans bordure ni caption est la fenetre msn bleue sans les menus ni la barre bleue (barre de caption Non Client Area pour les pros )
Sur cette fenetre, je gere le deplacement via l'appui sur la souris
Puis une deuxième fenetre qui est affichée sur demande (genre touche "alt"
ou un bouton).. et au moment de l'afficher (enfin, juste avant de l'afficher)
je "transfere" la fenetre MSN dans la liste des controles de la fenetre
Mere (celle qui est autour de la fenetre msn)... Bien sur, je positionne
le TopLEvel à false pour que la fenetre msn est le droit d'etre integrée dans
un controle.... Bien sur, je positionne le Location de la fenetre mere de façon à ce que la fenetre msn ne bouge pas (grosso modo, la location de la fenetre mere est "au dessus" et "à gauche" de la fenetre msn... et basta
le tour est joué...
Evidemment, j'utilise le processus reciproque pour cacher la fenetre mere...
Ci joint le code que j'ai mis au point hier soir rapidemment
C'est artisanal mais cela montre bien qu'il s'agit "vraissemblablement" de la technique de microsoft
Astuce : lors que j'affichais la fenetre mere, il fallait que j'appuie 2 fois sur ma touche "alt" pour que celle ci soit recuperer par la fenetre mere... donc, j'ai rajouté un SendKeys("a"), (la touche choisie est arbitraire bien sur) pour palier
à ce problème...
Cela dit, si quelqu'un sait la raison de ce comportement qui m'a obligé à une "telle ruse".. j'en serais ravi
Allez, encore un cadeau
The Monz, Toulouse
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager