2009-08-07 4 views
2

Je sais que cela peut être contrôlé au niveau du système, mais je veux remplacer le réglage du système et avoir une certaine apparence pour mon application seulement. Je suppose qu'il doit y avoir une fonction API Windows pour contrôler cela parce que j'ai vu une autre application Windows qui le fait.Comment puis-je contrôler l'épaisseur et la couleur de la bordure sur Windows Forms?

(Il est nécessaire d'entrer dans les raisons pour lesquelles je ne devrais pas le faire)

+2

Bonne chose que vous mettez l'avertissement là-bas, ou vous aurait obtenu 10 réponses vous dire de ne pas le faire (comme vous le savez sans doute). C'est facilement l'aspect le plus ennuyeux de stackoverflow. – MusiGenesis

Répondre

2

Si vous voulez une apparence personnalisée pour votre application, je voudrais juste faire ma forme tout sans frontières et gérer moi-même, que ce soit par le dessin sur le formulaire lui-même dans l'événement Paint, ou bien déplacer des contrôles autour (panneaux etc.) dans l'événement Resize. Vous devez gérer des choses comme glisser, redimensionner, fermer/minimiser, etc., mais rien de tout cela n'est particulièrement difficile.

Voici my answer à une question similaire, qui montre les bases de faire vous-même (c'est pour Windows Mobile, mais il fonctionnera aussi dans les fenêtres normales).

+0

J'ai commencé cette route après avoir posé la question. J'espérais qu'il y avait un meilleur moyen. Si je dessine les choses moi-même, est-ce que je peux encore faire redimensionner les fenêtres en envoyant un message de démarrage-redimensionnement ou autre chose? De pas, je ne peux pas répliquer l'effet de ligne pointillée qui est vu pendant qu'une fenêtre est en cours de redimensionnement (lorsque les fenêtres de réglage "Afficher le contenu de la fenêtre tout en faisant glisser" est désactivée). – Fantius

+0

Bon point - je ne sais pas à ce sujet. Je viens de vérifier iTunes (qui dans Windows est complètement dessiné par le propriétaire comme ce que vous essayez de faire), et il montre un contour de la ligne pointillée tout en faisant glisser, mais il est intéressant de noter que ce n'est pas la même ligne pointillée Fenêtre Windows, ce qui signifie qu'ils manipulent le contour eux-mêmes, aussi. – MusiGenesis

+1

Je pense que le contour serait relativement facile à mettre en œuvre. Dans l'événement mousedown, vous devez faire apparaître un second formulaire sans bordure avec un arrière-plan transparent et une bordure en pointillés, et le déplacer jusqu'à l'événement mouseup, puis déplacer votre formulaire réel vers la nouvelle position. – MusiGenesis

2

Ces éléments externes d'une fenêtre d'application sont collectivement appelés les fenêtres "chrome" et sont en effet restitués par le système d'exploitation. Divers indicateurs sont utilisés au niveau de l'API Windows pour contrôler certains aspects de chaque instance de fenêtre (par exemple l'existence d'une boîte de contrôle, d'une bordure, de boutons min/max, etc.), mais la largeur des fenêtres redimensionnables est déterminée par un paramètre système pour assurer l'uniformité et n'est pas configurable fenêtre par fenêtre. Vous pouvez, dans de nombreux cas, prendre le contrôle de certains aspects de votre fenêtre non exposés par .NET en interagissant avec l'API Windows et il est utile de lire la documentation de l'API Windows pour déterminer ce qui est possible à ce niveau. niveau inférieur. Je suggère de lire la documentation de CreateWindowEx comme point de départ.

http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx

.NET vous permet de changer la propriété FormBorderStyle pour sélectionner parmi les pas de frontière, frontière largeur de pixel, et redimensionnable (bordure épaisse). Si vous souhaitez faire quelque chose de personnalisé, vous devrez définir le style de bordure .NET sur none, puis assumer la responsabilité du rendu de la fenêtre chrome vous-même. Cela implique le rendu de votre propre barre de légende, des boutons min/max et de la bordure de la fenêtre. Ce n'est pas une entreprise légère, mais de nombreuses applications le font. C'est un long chemin à parcourir si tout ce que vous voulez, c'est contrôler la largeur de la bordure.

Cet article explique comment aborder cette tâche dans WPF et peut également être utile.

Window Chrome In WPF

+0

+1 sauf que c'est une entreprise relativement légère. Cela ne vaut généralement pas la peine, mais pas difficile du tout. – MusiGenesis

Questions connexes