InertButtonBase.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*******************************************************************************
  2. * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:InertButtonBase.cs
  5. * 2.功能描述:类文件
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 陈晓野 2014/09/01 1.00 新建
  9. *******************************************************************************/
  10. using System;
  11. using System.Drawing;
  12. using System.Drawing.Imaging;
  13. using System.Windows.Forms;
  14. namespace Dongke.IBOSS.PRD.Basics.DockPanel
  15. {
  16. internal abstract class InertButtonBase : Control
  17. {
  18. protected InertButtonBase()
  19. {
  20. SetStyle(ControlStyles.SupportsTransparentBackColor, true);
  21. BackColor = Color.Transparent;
  22. }
  23. public abstract Bitmap Image
  24. {
  25. get;
  26. }
  27. private bool m_isMouseOver = false;
  28. protected bool IsMouseOver
  29. {
  30. get
  31. {
  32. return m_isMouseOver;
  33. }
  34. private set
  35. {
  36. if (m_isMouseOver == value)
  37. return;
  38. m_isMouseOver = value;
  39. Invalidate();
  40. }
  41. }
  42. protected override Size DefaultSize
  43. {
  44. get
  45. {
  46. return Resources.DockPane_Close.Size;
  47. }
  48. }
  49. protected override void OnMouseMove(MouseEventArgs e)
  50. {
  51. base.OnMouseMove(e);
  52. bool over = ClientRectangle.Contains(e.X, e.Y);
  53. if (IsMouseOver != over)
  54. IsMouseOver = over;
  55. }
  56. protected override void OnMouseEnter(EventArgs e)
  57. {
  58. base.OnMouseEnter(e);
  59. if (!IsMouseOver)
  60. IsMouseOver = true;
  61. }
  62. protected override void OnMouseLeave(EventArgs e)
  63. {
  64. base.OnMouseLeave(e);
  65. if (IsMouseOver)
  66. IsMouseOver = false;
  67. }
  68. protected override void OnPaint(PaintEventArgs e)
  69. {
  70. if (IsMouseOver && Enabled)
  71. {
  72. using (Pen pen = new Pen(ForeColor))
  73. {
  74. e.Graphics.DrawRectangle(pen, Rectangle.Inflate(ClientRectangle, -1, -1));
  75. }
  76. }
  77. using (ImageAttributes imageAttributes = new ImageAttributes())
  78. {
  79. ColorMap[] colorMap = new ColorMap[2];
  80. colorMap[0] = new ColorMap();
  81. colorMap[0].OldColor = Color.FromArgb(0, 0, 0);
  82. colorMap[0].NewColor = ForeColor;
  83. colorMap[1] = new ColorMap();
  84. colorMap[1].OldColor = Image.GetPixel(0, 0);
  85. colorMap[1].NewColor = Color.Transparent;
  86. imageAttributes.SetRemapTable(colorMap);
  87. e.Graphics.DrawImage(
  88. Image,
  89. new Rectangle(0, 0, Image.Width, Image.Height),
  90. 0, 0,
  91. Image.Width,
  92. Image.Height,
  93. GraphicsUnit.Pixel,
  94. imageAttributes);
  95. }
  96. base.OnPaint(e);
  97. }
  98. public void RefreshChanges()
  99. {
  100. if (IsDisposed)
  101. return;
  102. bool mouseOver = ClientRectangle.Contains(PointToClient(Control.MousePosition));
  103. if (mouseOver != IsMouseOver)
  104. IsMouseOver = mouseOver;
  105. OnRefreshChanges();
  106. }
  107. protected virtual void OnRefreshChanges()
  108. {
  109. }
  110. }
  111. }