C# Winform 窗体美化

  1 using System;
  2 using System.ComponentModel;
  3 using System.Diagnostics;
  4 using System.Drawing;
  5 using System.Drawing.Drawing2D;
  6 using System.Runtime.InteropServices;
  7 using System.Threading;
  8 using System.Windows.Forms;
  9 using XKW_E.Tool;
 10 using Starts2000.WindowsClassName.Core;
 11 namespace Beautify
 12 {
 13     public partial class MyForm : Form
 14     {
 15         #region 基本信息
 16         [Category("ControlBox")]
 17         [Description("设置标题栏图标的菜单")]
 18         [DisplayName("CaptionMenu")]
 19         public ContextMenuStrip menu { get; set; }
 20         public Bitmap TitleImage;
 21         public Bitmap CloseButtonImage;
 22         public Bitmap CloseButtonPressDownImage;
 23         public Bitmap CloseButtonHoverImage;
 24         public Bitmap MaximumButtonImage;
 25         public Bitmap MaximumButtonHoverImage;
 26         public Bitmap MaximumButtonPressDownImage;
 27         public Bitmap MaximumNormalButtonImage;
 28         public Bitmap MaximumNormalButtonHoverImage;
 29         public Bitmap MaximumNormalButtonPressDownImage;
 30         public Bitmap MinimumButtonImage;
 31         public Bitmap MinimumButtonHoverImage;
 32         public Bitmap MinimumButtonPressDownImage;
 33         public Bitmap HelpButtonImage;
 34         public Bitmap HelpButtonHoverImage;
 35         public Bitmap HelpButtonPressDownImage;
 36         struct NonClientSizeInfo
 37         {
 38             public Size CaptionButtonSize;
 39             public Size BorderSize;
 40             public int CaptionHeight;
 41             public Rectangle CaptionRect;
 42             public Rectangle Rect;
 43             public Rectangle ClientRect;
 44             public int Width;
 45             public int Height;
 46         };
 47 
 48         #endregion
 49 
 50         #region 主要
 51         public MyForm() : base()
 52         {
 53             this.ControlBox = false;
 54             TitleImage = Properties.Resources.Main_Title;
 55 
 56             CloseButtonImage = Properties.Resources.Close_Normal;
 57             CloseButtonHoverImage = Properties.Resources.Close_On;
 58             CloseButtonPressDownImage = Properties.Resources.Close_Down;
 59 
 60 
 61             MaximumButtonImage = Properties.Resources.Max_Normal;
 62             MaximumButtonHoverImage = Properties.Resources.Max_On;
 63             MaximumButtonPressDownImage = Properties.Resources.Max_Down;
 64 
 65 
 66             MaximumNormalButtonImage = Properties.Resources.Restore_Normal;
 67             MaximumNormalButtonHoverImage = Properties.Resources.Restore_On;
 68             MaximumNormalButtonPressDownImage = Properties.Resources.Restore_Down;
 69 
 70             MinimumButtonImage = Properties.Resources.Min_Normal;
 71             MinimumButtonHoverImage = Properties.Resources.Min_On;
 72             MinimumButtonPressDownImage = Properties.Resources.Min_Down;
 73         }
 74         protected override void WndProc(ref Message m)
 75         {
 76             switch (m.Msg)
 77             {
 78                 case WindowsMessage.WM_NCPAINT: //绘制
 79                     PaintBorder(m);
 80                     return;
 81                 case WindowsMessage.WM_NCACTIVATE: //标题栏激活
 82                     if (m.WParam == (IntPtr)WindowsMessage.WM_FALSE)
 83                     {
 84                         m.Result = (IntPtr)WindowsMessage.WM_TRUE;
 85                     }
 86                     return;
 87                 case WindowsMessage.WM_PAINT:
 88                     if (this.WindowState == FormWindowState.Normal)
 89                     {
 90                         PaintBorder(m);
 91                     }
 92                     break;
 93                 case WindowsMessage.WM_SIZE:
 94                     PaintBorder(m);
 95                     break;
 96                 case WindowsMessage.WM_ACTIVATE: //窗体激活
 97                     PaintBorder(m);
 98                     break;
 99                 case WindowsMessage.WM_NCCALCSIZE: //边框大小改变
100                     PaintBorder(m);
101                     break;
102                 case WindowsMessage.WM_EXITSIZEMOVE: //结束大小改变
103                     PaintBorder(m);
104                     break;
105                 case WindowsMessage.WM_SETCURSOR: //光标设置
106                     if (SetCursor(m)) return;
107                     break;
108                 case WindowsMessage.WM_NCRBUTTONDOWN:  //标题栏鼠标右键按下
109                     IconClick(m);
110                     break;
111                 case WindowsMessage.WM_NCLBUTTONUP://标题栏左键释放
112                     UpButton(m);
113                     break;
114                 case WindowsMessage.WM_NCMOUSEMOVE://标题栏鼠标移动
115                     MoveButton(m);
116                     break;
117                 case WindowsMessage.WM_NCLBUTTONDOWN://标题栏左键按下
118                     if (DownButton(m)) return;
119                     break;
120             }
121             base.WndProc(ref m);
122         }
123         protected override CreateParams CreateParams
124         {
125             get
126             {
127                 CreateParams cp = base.CreateParams;
128                 return cp;
129             }
130         }
131         public static IntPtr SetClassLong(HandleRef hWnd, int nIndex, IntPtr dwNewLong)
132         {
133             if (IntPtr.Size > 4)
134                 return Win32API.SetClassLongPtr64(hWnd, nIndex, dwNewLong);
135             else
136                 return new IntPtr(Win32API.SetClassLongPtr32(hWnd, nIndex, unchecked((uint)dwNewLong.ToInt32())));
137         }
138         #endregion
139 
140         #region 处理
141         private NonClientSizeInfo GetNonClientInfo(IntPtr hwnd)
142         {
143             NonClientSizeInfo info = new NonClientSizeInfo();
144             info.CaptionButtonSize = SystemInformation.CaptionButtonSize;
145             info.CaptionHeight = SystemInformation.CaptionHeight;
146 
147             switch (this.FormBorderStyle)
148             {
149                 case FormBorderStyle.Fixed3D:
150                     info.BorderSize = SystemInformation.FixedFrameBorderSize;
151                     break;
152                 case FormBorderStyle.FixedDialog:
153                     info.BorderSize = SystemInformation.FixedFrameBorderSize;
154                     break;
155                 case FormBorderStyle.FixedSingle:
156                     info.BorderSize = SystemInformation.FixedFrameBorderSize;
157                     break;
158                 case FormBorderStyle.FixedToolWindow:
159                     info.BorderSize = SystemInformation.FixedFrameBorderSize;
160                     info.CaptionButtonSize = SystemInformation.ToolWindowCaptionButtonSize;
161                     info.CaptionHeight = SystemInformation.ToolWindowCaptionHeight;
162                     break;
163                 case FormBorderStyle.Sizable:
164                     info.BorderSize = SystemInformation.FrameBorderSize;
165                     break;
166                 case FormBorderStyle.SizableToolWindow:
167                     info.CaptionButtonSize = SystemInformation.ToolWindowCaptionButtonSize;
168                     info.BorderSize = SystemInformation.FrameBorderSize;
169                     info.CaptionHeight = SystemInformation.ToolWindowCaptionHeight;
170                     break;
171                 default:
172                     info.BorderSize = SystemInformation.BorderSize;
173                     break;
174             }
175             RECT areatRect = new RECT();
176             Win32API.GetWindowRect(hwnd, ref areatRect);
177 
178             int width = areatRect.right - areatRect.left;
179             int height = areatRect.bottom - areatRect.top;
180 
181             info.Width = width;
182             info.Height = height;
183 
184             Point xy = new Point(areatRect.left, areatRect.top);
185             xy.Offset(-areatRect.left, -areatRect.top);
186 
187             info.CaptionRect = new Rectangle(xy.X, xy.Y + info.BorderSize.Height, width, info.CaptionHeight);
188             info.Rect = new Rectangle(xy.X, xy.Y, width, height);
189             info.ClientRect = new Rectangle(xy.X + info.BorderSize.Width,
190                 xy.Y + info.CaptionHeight + info.BorderSize.Height,
191                 width - info.BorderSize.Width * 2,
192                 height - info.CaptionHeight - info.BorderSize.Height * 2);
193             return info;
194         }
195         #endregion
196 
197         #region 绘制
198         bool painting = true;
199 
200         private void PaintBorder(Message m)
201         {
202             try
203             {
204                 PAINTSTRUCT paint = new PAINTSTRUCT();
205                 paint.rcPaint = new Rectangle(0, 0, this.Width, this.Height);
206                 if (painting)
207                 {
208 
209                     Win32API.BeginPaint(m.HWnd, ref paint);
210                     painting = false;
211                     NonClientSizeInfo info = GetNonClientInfo(m.HWnd);
212                     BufferedGraphicsContext context = BufferedGraphicsManager.Current;
213                     IntPtr hDC = Win32API.GetWindowDC(m.HWnd);
214                     DrawLeft(hDC, context);
215                     DrawRight(hDC, context);
216                     DrawBottom(hDC, context);
217                     DrawTitle(hDC, context, info);
218                     Win32API.EndPaint(m.HWnd, ref paint);
219                     painting = true;
220                     Win32API.ReleaseDC(Handle, hDC);
221                 }
222             }
223             catch (Exception)
224             {
225 
226             }
227         }
228 
229 
230         #region 边框
231         Rectangle title;
232         Rectangle btnRect;
233         Rectangle maxRect;
234         Rectangle minRect;
235         Rectangle helpRect;
236         Rectangle iconRect;
237         RectangleF rectText;
238         private void DrawTitleInfo(Graphics g, NonClientSizeInfo info)
239         {
240             int titleX;
241             int iconW = 1;
242             int iconH = 1;
243 
244             if (info.CaptionHeight < 20)
245             {
246                 iconW = 15;
247                 iconH = 20;
248             }
249             else
250             {
251                 iconW = 20;
252                 iconH = 25;
253             }
254             Size captionTitleSize = TextRenderer.MeasureText(this.Text, SystemFonts.CaptionFont);
255             Size iconSize = new Size(iconW, iconH);
256 
257             if (this.WindowState == FormWindowState.Maximized)
258             {
259                 if (this.ShowIcon &&
260                   this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
261                   this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
262                 {
263                     iconRect = new Rectangle(new Point(info.BorderSize.Width + 9, info.BorderSize.Height / 2), iconSize);
264                     g.DrawIcon(this.Icon, iconRect);
265                     titleX = info.BorderSize.Width + iconSize.Width + info.BorderSize.Width;
266                 }
267                 else
268                 {
269                     titleX = info.BorderSize.Width;
270                 }
271                 rectText = new RectangleF(titleX + 7,
272                        (info.BorderSize.Height + info.CaptionHeight - captionTitleSize.Height) / 2 + 2 + info.BorderSize.Height / 2,
273                        info.CaptionRect.Width - info.BorderSize.Width * 2 - SystemInformation.MinimumWindowSize.Width,
274                        info.CaptionRect.Height);
275             }
276             else
277             {
278                 if (this.ShowIcon &&
279                     this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
280                     this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
281                 {
282                     iconRect = new Rectangle(new Point(info.BorderSize.Width + 9, info.BorderSize.Height / 2), iconSize);
283                     g.DrawIcon(this.Icon, iconRect);
284                     titleX = info.BorderSize.Width + iconSize.Width + info.BorderSize.Width;
285                 }
286                 else
287                 {
288                     titleX = info.BorderSize.Width;
289                 }
290                 rectText = new RectangleF(titleX + 7,
291                         (info.BorderSize.Height + info.CaptionHeight - captionTitleSize.Height) / 2 + 2,
292                         info.CaptionRect.Width - info.BorderSize.Width * 2 - SystemInformation.MinimumWindowSize.Width,
293                         info.CaptionRect.Height);
294             }
295 
296             Rectangle titleText = new Rectangle(iconRect.Right, iconRect.Height, captionTitleSize.Width > 0 ? captionTitleSize.Width : 1, captionTitleSize.Height > 0 ? captionTitleSize.Height : 1);
297             LinearGradientBrush brush = new LinearGradientBrush(titleText, Color.White, Color.Gold, LinearGradientMode.Vertical);
298             SolidBrush brushBorder = new SolidBrush(Color.Gray);
299             g.DrawString(this.Text, new Font(SystemFonts.CaptionFont, FontStyle.Bold), brushBorder, rectText, StringFormat.GenericTypographic);
300             rectText.Offset(1, 1);
301             g.DrawString(this.Text, new Font(SystemFonts.CaptionFont, FontStyle.Bold), brush, rectText, StringFormat.GenericTypographic);
302 
303         }
304         private void DrawControlBox(Graphics g, NonClientSizeInfo info, bool closeBtn, bool maxBtn, bool minBtn, bool helpBtn)
305         {
306             Size iconSize = SystemInformation.IconSize;
307 
308             int closeBtnPosX = info.CaptionRect.Width - info.BorderSize.Width - CloseButtonImage.Width;
309             int maxBtnPosX = closeBtnPosX - MaximumButtonImage.Width;
310             int minBtnPosX = maxBtnPosX - MinimumButtonImage.Width;
311             // int helpBtnPosX = minBtnPosX - HelpButtonImage.Width;
312             int btnPosY = 0;
313             if (this.WindowState == FormWindowState.Maximized)
314             {
315                 btnPosY = info.BorderSize.Height;
316             }
317             btnRect = new Rectangle(new Point(closeBtnPosX, btnPosY), CloseButtonImage.Size);
318             maxRect = new Rectangle(new Point(maxBtnPosX, btnPosY), MaximumButtonImage.Size);
319             minRect = new Rectangle(new Point(minBtnPosX, btnPosY), MinimumButtonImage.Size);
320             //  helpRect = new Rectangle(new Point(helpBtnPosX, btnPosY), HelpButtonImage.Size);
321             g.DrawImage(CloseButtonImage, btnRect);
322 
323             if (this.MaximizeBox || this.MinimizeBox)
324             {
325                 if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
326                     this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
327                 {
328                     if (this.WindowState == FormWindowState.Maximized)
329                     {
330                         g.DrawImage(MaximumNormalButtonImage, maxRect);
331                     }
332                     else
333                     {
334                         g.DrawImage(MaximumButtonImage, maxRect);
335                     }
336                     g.DrawImage(MinimumButtonImage, minRect);
337                 }
338             }
339             //if (this.HelpButton)
340             //{
341             //    if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
342             //        this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
343             //    {
344             //        g.DrawImage(HelpButtonImage, helpRect);
345             //    }
346             //}
347         }
348         private void DrawTitle(IntPtr hDC, BufferedGraphicsContext context, NonClientSizeInfo info)
349         {
350             int leftAndRightWidth = (this.Width - this.ClientRectangle.Width) / 2;
351             int height = this.Height - this.ClientRectangle.Height - leftAndRightWidth > 0 ? this.Height - this.ClientRectangle.Height - leftAndRightWidth : 1;
352             int width = this.Width > 0 ? this.Width : 1;
353             title = new Rectangle(0, 0, width, height);
354             BufferedGraphics bg = context.Allocate(hDC, title);
355             Graphics g = bg.Graphics;
356             g.CompositingQuality = CompositingQuality.HighSpeed;
357             g.DrawImage(TitleImage, title);
358             DrawTitleInfo(g, info);
359             DrawControlBox(g, info, this.ControlBox, this.MaximizeBox, this.MinimizeBox, this.HelpButton);
360             bg.Render();
361             bg.Dispose();
362         }
363         private void DrawLeft(IntPtr hDC, BufferedGraphicsContext context)
364         {
365             int leftAndRightWidth = (this.Width - this.ClientRectangle.Width) / 2;
366             int height = this.Height;
367             int Width = (this.Width - this.ClientRectangle.Width) / 2;
368             int y = this.Height - this.ClientRectangle.Height - leftAndRightWidth;
369             Rectangle left = new Rectangle(0, y, Width, height);
370             BufferedGraphics bg = context.Allocate(hDC, left);
371             Graphics g = bg.Graphics;
372             g.CompositingQuality = CompositingQuality.HighSpeed;
373             g.DrawImage(Properties.Resources.Main_Left, left);
374             bg.Render();
375             bg.Dispose();
376         }
377         private void DrawRight(IntPtr hDC, BufferedGraphicsContext context)
378         {
379             int leftAndRightWidth = (this.Width - this.ClientRectangle.Width) / 2;
380             int height = this.Height;
381             int Width = (this.Width - this.ClientRectangle.Width) / 2;
382             int x = this.ClientRectangle.Width + (this.Width - this.ClientRectangle.Width) / 2;
383             int y = this.Height - this.ClientRectangle.Height - leftAndRightWidth;
384             Rectangle right = new Rectangle(x, y, Width, height);
385             BufferedGraphics bg = context.Allocate(hDC, right);
386             Graphics g = bg.Graphics;
387             g.CompositingQuality = CompositingQuality.HighSpeed;
388             g.DrawImage(Properties.Resources.Main_Right, right);
389             bg.Render();
390             bg.Dispose();
391         }
392         private void DrawBottom(IntPtr hDC, BufferedGraphicsContext context)
393         {
394             int leftAndRightWidth = (this.Width - this.ClientRectangle.Width) / 2;
395             int width = this.Width - 2;
396             int height = leftAndRightWidth;
397             int x = 1;
398             int y = this.Height - leftAndRightWidth;
399             Rectangle buttom = new Rectangle(x, y, width, height);
400             BufferedGraphics bg = context.Allocate(hDC, buttom);
401             Graphics g = bg.Graphics;
402             g.CompositingQuality = CompositingQuality.HighSpeed;
403             g.FillRectangle(new SolidBrush(Color.FromArgb(133, 199, 247)), buttom);
404             //g.DrawImage(Properties.Resources.Main_Bottom, buttom);
405             bg.Render();
406             bg.Dispose();
407         }
408         #endregion
409 
410         #region 按钮
411         Point pClick;
412         private void IconClick(Message m)
413         {
414             pClick = new Point((int)m.LParam);
415             pClick.Offset(-this.Left, -this.Top);
416             int locationX = pClick.X + this.Location.X;
417             int locationY = pClick.Y + this.Location.Y;
418             if (iconRect.Contains(pClick))
419             {
420                 if (menu != null)
421                 {
422                     menu.Show(locationX, locationY);
423                 }
424 
425             }
426         }
427         private void MoveButton(Message m)
428         {
429             pClick = new Point((int)m.LParam);
430             pClick.Offset(-this.Left, -this.Top);
431             if (title.Contains(pClick))
432             {
433                 IntPtr dc = Win32API.GetWindowDC(m.HWnd);
434                 Graphics g = Graphics.FromHdc(dc);
435 
436                 #region 关闭按钮
437                 if (btnRect.Contains(pClick))
438                 {
439                     g.DrawImage(CloseButtonHoverImage, btnRect);
440                 }
441                 else
442                 {
443                     g.DrawImage(CloseButtonImage, btnRect);
444                 }
445                 #endregion
446 
447                 #region 最大化最小化
448                 if (this.MaximizeBox || this.MinimizeBox)
449                 {
450                     if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
451                         this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
452                     {
453                         if (this.WindowState == FormWindowState.Maximized)
454                         {
455                             if (this.MaximizeBox)
456                             {
457                                 if (maxRect.Contains(pClick))
458                                 {
459                                     g.DrawImage(MaximumNormalButtonHoverImage, maxRect);
460                                 }
461                                 else
462                                 {
463                                     g.DrawImage(MaximumNormalButtonImage, maxRect);
464                                 }
465                             }
466                             else
467                             {
468                                 g.DrawImage(MaximumNormalButtonImage, maxRect);
469                             }
470                         }
471                         else
472                         {
473                             if (this.MaximizeBox)
474                             {
475                                 if (maxRect.Contains(pClick))
476                                 {
477                                     g.DrawImage(MaximumButtonHoverImage, maxRect);
478                                 }
479                                 else
480                                 {
481                                     g.DrawImage(MaximumButtonImage, maxRect);
482                                 }
483                             }
484                             else
485                             {
486                                 g.DrawImage(MaximumButtonImage, maxRect);
487                             }
488                         }
489 
490                         if (this.MinimizeBox)
491                         {
492                             if (minRect.Contains(pClick))
493                             {
494                                 g.DrawImage(MinimumButtonHoverImage, minRect);
495                             }
496                             else
497                             {
498                                 g.DrawImage(MinimumButtonImage, minRect);
499                             }
500                         }
501                         else
502                         {
503                             g.DrawImage(MinimumButtonImage, minRect);
504                         }
505                     }
506                 }
507                 #endregion
508 
509                 #region 帮助
510                 //if (this.HelpButton)
511                 //{
512                 //    if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
513                 //        this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
514                 //    {
515                 //        if (helpRect.Contains(pClick))
516                 //        {
517                 //            g.DrawImage(HelpButtonHoverImage, helpRect);
518                 //        }
519                 //        else
520                 //        {
521                 //            g.DrawImage(HelpButtonImage, helpRect);
522                 //        }
523                 //    }
524                 //}
525                 #endregion;
526                 g.Dispose();
527                 Win32API.ReleaseDC(Handle, dc);
528             }
529         }
530         private void UpButton(Message m)
531         {
532             pClick = new Point((int)m.LParam);
533             pClick.Offset(-this.Left, -this.Top);
534 
535             if (btnRect.Contains(pClick))
536             {
537                 this.Close();
538             }
539             if (this.MaximizeBox)
540                 if (maxRect.Contains(pClick))
541                 {
542                     if (this.WindowState == FormWindowState.Maximized)
543                     {
544                         this.WindowState = FormWindowState.Normal;
545                     }
546                     else
547                     {
548                         this.WindowState = FormWindowState.Maximized;
549                     }
550                 }
551             if (this.MinimizeBox)
552                 if (minRect.Contains(pClick))
553                 {
554                     if (this.WindowState == FormWindowState.Minimized)
555                     {
556                         this.WindowState = FormWindowState.Normal;
557                     }
558                     else
559                     {
560                         this.WindowState = FormWindowState.Minimized;
561                     }
562                 }
563             if (this.HelpButton)
564                 if (helpRect.Contains(pClick))
565                 {
566                     if (this.WindowState == FormWindowState.Minimized)
567                     {
568                         this.WindowState = FormWindowState.Normal;
569                     }
570                     else
571                     {
572                         this.WindowState = FormWindowState.Minimized;
573                     }
574                 }
575         }
576         private bool DownButton(Message m)
577         {
578             bool ret = false; //是否触发点击
579             pClick = new Point((int)m.LParam);
580             pClick.Offset(-this.Left, -this.Top);
581             if (title.Contains(pClick))
582             {
583                 IntPtr dc = Win32API.GetWindowDC(m.HWnd);
584                 Graphics g = Graphics.FromHdc(dc);
585                 #region 关闭按钮
586                 if (btnRect.Contains(pClick))
587                 {
588                     g.DrawImage(CloseButtonPressDownImage, btnRect);
589                     ret = true;
590                 }
591                 else
592                 {
593                     g.DrawImage(CloseButtonImage, btnRect);
594                 }
595                 #endregion
596 
597                 #region 最大化最小化
598                 if (this.MaximizeBox || this.MinimizeBox)
599                 {
600                     if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow &&
601                         this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow)
602                     {
603                         if (this.WindowState == FormWindowState.Maximized)
604                         {
605                             if (maxRect.Contains(pClick) && this.MaximizeBox)
606                             {
607                                 g.DrawImage(MaximumNormalButtonPressDownImage, maxRect);
608                                 ret = true;
609                             }
610                             else
611                             {
612                                 g.DrawImage(MaximumNormalButtonImage, maxRect);
613                             }
614                         }
615                         else
616                         {
617                             if (maxRect.Contains(pClick) && this.MaximizeBox)
618                             {
619                                 g.DrawImage(MaximumButtonPressDownImage, maxRect);
620                                 ret = true;
621                             }
622                             else
623                             {
624                                 g.DrawImage(MaximumButtonImage, maxRect);
625                             }
626                         }
627                         if (minRect.Contains(pClick) && this.MinimizeBox)
628                         {
629                             g.DrawImage(MinimumButtonPressDownImage, minRect);
630                             ret = true;
631                         }
632                         else
633                         {
634                             g.DrawImage(MinimumButtonImage, minRect);
635                         }
636                     }
637                 }
638                 #endregion
639 
640                 #region 帮助
641                 if (this.HelpButton)
642                 {
643                     if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.FixedToolWindow &&
644                         this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
645                     {
646                         if (helpRect.Contains(pClick))
647                         {
648                             g.DrawImage(HelpButtonPressDownImage, helpRect);
649                             ret = true;
650                         }
651                         else
652                         {
653                             g.DrawImage(HelpButtonImage, helpRect);
654                         }
655                     }
656                 }
657                 #endregion;
658                 g.Dispose();
659                 Win32API.ReleaseDC(m.HWnd, dc);
660             }
661             return ret;
662         }
663         #endregion
664 
665         #region  边缘设置
666 
667         private bool SetCursor(Message m)
668         {
669             bool flag = false;
670             if (btnRect.Contains(pClick))
671             {
672                 Win32API.SetCursor(Cursors.Default.Handle);
673                 flag = true;
674             }
675             if (this.MaximizeBox)
676                 if (maxRect.Contains(pClick))
677                 {
678                     Win32API.SetCursor(Cursors.Default.Handle);
679                     flag = true;
680                 }
681             if (this.MinimizeBox)
682                 if (minRect.Contains(pClick))
683                 {
684                     Win32API.SetCursor(Cursors.Default.Handle);
685                     flag = true;
686                 }
687             if (this.HelpButton)
688                 if (helpRect.Contains(pClick))
689                 {
690                     Win32API.SetCursor(Cursors.Default.Handle);
691                     flag = true;
692                 }
693             if (menu != null)
694             {
695                 if (iconRect.Contains(pClick))
696                 {
697                     Win32API.SetCursor(Cursors.Default.Handle);
698                     flag = true;
699                 }
700             }
701             return flag;
702         }
703         #endregion
704 
705         #endregion
706         private void InitializeComponent()
707         {
708             this.SuspendLayout();
709             // 
710             // MyForm
711             // 
712             this.ClientSize = new System.Drawing.Size(438, 395);
713             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
714             this.Name = "MyForm";
715             this.ResumeLayout(false);
716 
717         }
718     }
719 }

 

posted @ 2016-05-05 09:59  _Cheer  阅读(4626)  评论(0编辑  收藏  举报