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 }