Bonjour,
J'aimerais modifier le style d'une fenetre winform. Par exemple, changer le bandeau de titre, les boutons close, minimize et maximixe...
Comment dois-je m'y prendre,
Merci,
Vince
Bonjour,
J'aimerais modifier le style d'une fenetre winform. Par exemple, changer le bandeau de titre, les boutons close, minimize et maximixe...
Comment dois-je m'y prendre,
Merci,
Vince
tu veux changer quoi sur la form windows...??
tu veux changer la forme du bandeau de titre ou le texte qui est affiché dessus???
et pour les boutons, tu as des propriétés qui te permettent de les afficher ou les cacher
Regarde au niveau du FlatStyle (Flat, Popup, Standard, System) ... Si c'est ca que tu veux!
Bonjour
au niveau de la faq tu as peut être quelque chose d'interessant !
Sinon si tu souhaites enlever certains boutons tu as la possibilité de le faire avec la partie propriétés sur la droite (à confirmer mais je pense qu'il faut chercher de ce côté là )
voila voila
Merci de vos reponses,
Je cherche a modifier l'apparence du titre, c'est a dire a ne plus avoir le bandeau bleu winXP, mais dessiner moi meme un style a mes fenetres. Ce serait un peu appliquer un theme windows, mais juste a mon appli.
Vincent
Bonjour !!!Envoyé par Vince57
C'est plus vicieux
Je n'ai pas réellement d'idée pour modifier le style d'une fenetre précise (ou d'une appli) Dans la mesure ou l'appli utlise par défaut le style de WinXp (ou autre).
Ce qui serait (peut etre) possible de faire, serait de créer un propre style sous StyleXp ou autre de compiler ce style et d'essayer d'acceder a cet bibliotheque de style par le bias de C# ]> mais alors la sans conviction aucune
Ca risque d'être pénible
Sinon --> photoshop et tu refais toi même tes boutons (en mettant ta form avec aucun controle)
Autre solution : tu fait une form dans bordure (donc pas de barre de titre etc...) et tu implémente ta propre barre du tire (avec gestion du déplacement de la fenêtre, fermeture, miniaturisation, ....)
C'est plus lourd mais faisable.
Ya un exemple de ce type de fenêtre sur codeproject :
http://www.codeproject.com/cs/miscct...indowsForm.asp
Personnellement, je pense que tout est faisable quand on creuse un peu...
Il y a plein d'appli windows dont les theme sont modifié et qui n'ont pas besoin d'enlever la barre classique par exemple.
.NET a un namespace qui contient a mon avis le style et qui doit pouvoir etre exploité (peut-être System.Drawing je sais pas) Apres, regarde si tu trouve un logiciel open-source qui a un esthétique personnalisé , récupères-en le code source et tu trouvera peut-être ce qu'il te faut... Je sais que je vais un peu loin mais bon.
Dernière chose, DotNetBar (DevComponent) Propose une version d'essais qui contient des sources de fenêtre personnalisé, tu pourra peut-être aussi trouver quelque astuce pour modifier le style.
Beaucoup de peut-être dans ce message (et un peu tard aussi sans doute) car je n'ai pas creuser mais bon quelques piste envisageable si tu le souhaite
Bonjour Vince57
Tu peux essayer avec le namespace VisualStyleRenderer qui utilise les styles visuels Win XP mais "huge work" qui t'attend car tu dois tout gerer resizing,moving ,closing ,sizing .............comme le montre cet exemple de MSDN Doc:ImitationWindow
code:
Cette classe heritee de control utilise une collection de la classe VisualStyleElement et la classe static VisualStyleRender pour un rendu ( peinture) des "parts" (chaque VisualStyleElement identifie par son nom qui correspond une partie de la fenetre ..... regarde le namespace).
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392 using System; using System.Text; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections.Generic; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; namespace VisualStyleRendererSample { class Form1 : Form { public Form1() : base() { this.Size = new Size(800, 600); this.Location = new Point(20, 20); this.BackColor = Color.DarkGray; WindowSimulation Window1 = new WindowSimulation(); Controls.Add(Window1); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } public class WindowSimulation : Control { private Dictionary<string, VisualStyleElement> windowElements = new Dictionary<string, VisualStyleElement>(); private Dictionary<string, Rectangle> elementRectangles = new Dictionary<string, Rectangle>(); private VisualStyleRenderer renderer = null; private Point closeButtonOffset; private Size gripperSize; private Size closeButtonSize; private bool isResizing = false; private bool isMoving = false; private bool isClosing = false; private int captionHeight; private int frameThickness; private int statusHeight = 22; private Point originalClick = new Point(); private Point resizeOffset = new Point(); public WindowSimulation() : base() { this.Location = new Point(50, 50); this.Size = new Size(350, 300); this.BackColor = Color.Azure; this.DoubleBuffered = true; this.MinimumSize = new Size(300, 200); this.Font = SystemFonts.CaptionFont; this.Text = "Simulated Window"; // Insert the VisualStyleElement objects into the Dictionary. windowElements.Add("windowCaption", VisualStyleElement.Window.Caption.Active); windowElements.Add("windowBottom", VisualStyleElement.Window.FrameBottom.Active); windowElements.Add("windowLeft", VisualStyleElement.Window.FrameLeft.Active); windowElements.Add("windowRight", VisualStyleElement.Window.FrameRight.Active); windowElements.Add("windowClose", VisualStyleElement.Window.CloseButton.Normal); windowElements.Add("statusBar", VisualStyleElement.Status.Bar.Normal); windowElements.Add("statusGripper", VisualStyleElement.Status.Gripper.Normal); // Get the sizes and location offsets for the window parts // as specified by the visual style, and then use this // information to calcualate the rectangles for each part. GetPartDetails(); CalculateRectangles(); this.MouseDown += new MouseEventHandler(ImitationWindow_MouseDown); this.MouseUp += new MouseEventHandler(ImitationWindow_MouseUp); this.MouseMove += new MouseEventHandler(ImitationWindow_MouseMove); } // Get the sizes and offsets for the window parts as specified // by the visual style. private void GetPartDetails() { // Do nothing further if visual styles are not enabled. if (!Application.RenderWithVisualStyles) { return; } using (Graphics g = this.CreateGraphics()) { // Get the size and offset of the close button. if (SetRenderer(windowElements["windowClose"])) { closeButtonSize = renderer.GetPartSize(g, ThemeSizeType.True); closeButtonOffset = renderer.GetPoint(PointProperty.Offset); } // Get the height of the window caption. if (SetRenderer(windowElements["windowCaption"])) { captionHeight = renderer.GetPartSize(g, ThemeSizeType.True).Height; } // Get the thickness of the left, bottom, // and right window frame. if (SetRenderer(windowElements["windowLeft"])) { frameThickness = renderer.GetPartSize(g, ThemeSizeType.True).Width; } // Get the size of the resizing gripper. if (SetRenderer(windowElements["statusGripper"])) { gripperSize = renderer.GetPartSize(g, ThemeSizeType.True); } } } // Use the part metrics to determine the current size // of the rectangles for all of the window parts. private void CalculateRectangles() { int heightMinusFrame = ClientRectangle.Height - frameThickness; // Calculate the window frame rectangles and add them // to the Dictionary of rectangles. elementRectangles["windowCaption"] = new Rectangle(0, 0, ClientRectangle.Width, captionHeight); elementRectangles["windowBottom"] = new Rectangle(0, heightMinusFrame, ClientRectangle.Width, frameThickness); elementRectangles["windowLeft"] = new Rectangle(0, captionHeight, frameThickness, heightMinusFrame - captionHeight); elementRectangles["windowRight"] = new Rectangle(ClientRectangle.Width - frameThickness, captionHeight, frameThickness, heightMinusFrame - captionHeight); // Calculate the window button rectangle and add it // to the Dictionary of rectangles. elementRectangles["windowClose"] = new Rectangle(ClientRectangle.Right + closeButtonOffset.X, closeButtonOffset.Y, closeButtonSize.Width, closeButtonSize.Height); // Calculate the status bar rectangles and add them // to the Dictionary of rectangles. elementRectangles["statusBar"] = new Rectangle(frameThickness, heightMinusFrame - statusHeight, ClientRectangle.Width - (2 * frameThickness), statusHeight); elementRectangles["statusGripper"] = new Rectangle(ClientRectangle.Right - gripperSize.Width - frameThickness, heightMinusFrame - gripperSize.Height, gripperSize.Width, gripperSize.Height); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // Ensure that visual styles are supported. if (!Application.RenderWithVisualStyles) { this.Text = "Visual styles are not enabled."; TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.Location, this.ForeColor); return; } // Set the clip region to define the curved corners // of the caption. SetClipRegion(); // Draw each part of the window. foreach (KeyValuePair<string, VisualStyleElement> entry in windowElements) { if (SetRenderer(entry.Value)) { renderer.DrawBackground(e.Graphics, elementRectangles[entry.Key]); } } // Draw the caption text. TextRenderer.DrawText(e.Graphics, this.Text, this.Font, elementRectangles["windowCaption"], Color.White, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter); } // Initiate dragging, resizing, or closing the imitation window. void ImitationWindow_MouseDown(object sender, MouseEventArgs e) { // The user clicked the close button. if (elementRectangles["windowClose"].Contains(e.Location)) { windowElements["windowClose"] = VisualStyleElement.Window.CloseButton.Pressed; isClosing = true; } // The user clicked the status grip. else if (elementRectangles["statusGripper"]. Contains(e.Location)) { isResizing = true; this.Cursor = Cursors.SizeNWSE; resizeOffset.X = this.Right - this.Left - e.X; resizeOffset.Y = this.Bottom - this.Top - e.Y; } // The user clicked the window caption. else if (elementRectangles["windowCaption"]. Contains(e.Location)) { isMoving = true; originalClick.X = e.X; originalClick.Y = e.Y; } Invalidate(); } // Stop any current resizing or moving actions. void ImitationWindow_MouseUp(object sender, MouseEventArgs e) { // Stop moving the location of the window rectangles. if (isMoving) { isMoving = false; } // Change the cursor back to the default if the user // stops resizing. else if (isResizing) { isResizing = false; } // Close the application if the user clicks the // close button. else if (elementRectangles["windowClose"]. Contains(e.Location) && isClosing) { Application.Exit(); } } // Handle resizing or moving actions. void ImitationWindow_MouseMove(object sender, MouseEventArgs e) { // The left mouse button is down. if ((MouseButtons.Left & e.Button) == MouseButtons.Left) { // Calculate the new control size if the user is // dragging the resizing grip. if (isResizing) { this.Width = e.X + resizeOffset.X; this.Height = e.Y + resizeOffset.Y; CalculateRectangles(); } // Calculate the new location of the control if the // user is dragging the window caption. else if (isMoving) { int XChange = this.Location.X + (e.X - originalClick.X); int YChange = this.Location.Y + (e.Y - originalClick.Y); this.Location = new Point(XChange, YChange); } // Cancel the closing action if the user clicked // and held down on the close button, and has dragged // the pointer outside the button. else if (!elementRectangles["windowClose"]. Contains(e.Location) && isClosing) { isClosing = false; windowElements["windowClose"] = VisualStyleElement.Window.CloseButton.Normal; } } // The left mouse button is not down. else { // Paint the close button hot if the cursor is on it. Rectangle closeRectangle = elementRectangles["windowClose"]; windowElements["windowClose"] = closeRectangle.Contains(e.Location) ? VisualStyleElement.Window.CloseButton.Hot : VisualStyleElement.Window.CloseButton.Normal; // Use a resizing cursor if the cursor is on the // status grip. Rectangle gripRectangle = elementRectangles["statusGripper"]; this.Cursor = gripRectangle.Contains(e.Location) ? Cursors.SizeNWSE : Cursors.Default; } Invalidate(); } // Calculate and set the clipping region for the control // so that the corners of the title bar are rounded. private void SetClipRegion() { if (!Application.RenderWithVisualStyles) { return; } using (Graphics g = this.CreateGraphics()) { // Get the current region for the window caption. if (SetRenderer(windowElements["windowCaption"])) { Region clipRegion = renderer.GetBackgroundRegion( g, elementRectangles["windowCaption"]); // Get the client rectangle, but exclude the region // of the window caption. int height = (int)clipRegion.GetBounds(g).Height; Rectangle nonCaptionRect = new Rectangle( ClientRectangle.X, ClientRectangle.Y + height, ClientRectangle.Width, ClientRectangle.Height - height); // Add the rectangle to the caption region, and // make this region the form's clipping region. clipRegion.Union(nonCaptionRect); this.Region = clipRegion; } } } // Set the VisualStyleRenderer to a new element. private bool SetRenderer(VisualStyleElement element) { if (!VisualStyleRenderer.IsElementDefined(element)) { return false; } if (renderer == null) { renderer = new VisualStyleRenderer(element); } else { renderer.SetParameters(element); } return true; } } }
La collection n'est pas limitative à un Winform car elle expose une classe VisualStylElement pour une panoplies de controles et permet de modifier le comportement et l'aspect de n'importe quel controle...........
lien MSDN :
http://www.google.fr/url?sa=t&source...B4_WudiRoUm_6w
bon code..........
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