使用。net SDK编写位图按钮控件

本文讨论的是编写一个定制的按钮控件,当用户将鼠标移到按钮上、单击按钮并离开按钮时,该控件将显示不同的图像。这个控件完全类似于MFC中可用的CBitmapButton控件类。本文包含的演示项目有一个非常简单的Button类派生类的实现。 对于Windows中的每个控件,框架为用户在GUI应用程序中采取的不同操作触发事件。这使应用程序有机会响应这些事件,并根据控件或窗口的设计和需求采取行动。这也适用于按钮控件。Button类派生自ButtonBase类。这个基类封装了事件处理的大多数典型实现。如果不希望对控件执行任何自定义工作,则基类将为我们处理所有事件。由于我们希望为不同的用户操作在按钮上绘制不同的图像,因此派生类必须处理按钮窗口的绘制。在. net框架中,在按钮控件上绘制图像非常简单,只需将图像文件资源作为button类的属性之一附加即可。属性是BackgroundImage。如果你不想为不同的动作改变图像,那么你不需要从基类派生任何特殊的类;在应用程序的表单中,设置该属性即可完成。为了完成不同图像的绘制,您可以使用Button类的另一个属性ImageList。ImageList类非常像MFC中的CImageList类。您可以向此列表添加不同的图像。可以将图像列表附加到按钮控件,然后将列表中图像的索引分配给按钮控件。. net框架将在控件上绘制该图像。您可以利用这个概念来更改按钮上对应于不同操作的图像。ButtonBase类有一堆可重写的虚函数,当鼠标移动到控件上时,一个按钮被单击或一个按钮进入上升位置时,这些虚函数将被调用。这些方法分别是绘制、绘制和绘制。您可以在派生类中提供自己的实现来处理这些事件。只要确保您也调用了基类的方法。 导出控制的实现如下: 隐藏,收缩,复制Code

public class NKBitmapButton : Button
{
   public NKBitmapButton()
   {
   }
   
   protected override Rectangle OverChangeRectangle 
   {
      get
      {
         return base.ClientRectangle;
      }
   }
   
   protected override void PaintDown (PaintEventArgs pevent, int borderWidth)
   {
      ImageIndex = 1;
      // Call base class method.
      base.PaintDown (pevent, borderWidth);
   }
   
   protected override void PaintOver (PaintEventArgs pevent)
   {
      ImageIndex = 0;
      // Call base class method.
      base.PaintOver (pevent);
   }
   
   protected override void PaintRaised (PaintEventArgs pevent, int borderWidth)
   {
      ImageIndex = 0;
      // Call base class method.
      base.PaintRaised (pevent, borderWidth);
   }
}

. net框架中有一个bug。当鼠标移动到按钮控件上时,不会调用PaintOver方法。它只有在您单击按钮后才会被调用。因此,我将图像索引设置为按钮处于正常上升位置时显示的图像索引。 如何使用NKBitmapButton类 在windows应用程序中,添加一个按钮。向导将在表单类的InitializeComponent方法中添加一个条目。将变量类型从System.WinForms中更改。按钮NetGUIGoodies.NKBitmapButton。向表单添加一个图像列表。创建两个大小为48x48的位图,并将它们添加到列表中。当按钮处于正常凸起位置时,将绘制索引0处的图像;当单击按钮时,将绘制索引1处的图像,并且它处于下降位置。为了使实现简单,我没有向派生的button类添加属性或方法来指定图像的大小和索引。 隐藏,复制Code

private NetGUIGoodies.NKBitmapButton PictureButton;

private void InitializeComponent()
{
   this.PictureButton = new NetGUIGoodies.NKBitmapButton ();
   this.ButtonImageList = new System.WinForms.ImageList ();
   .
   .
   PictureButton.ImageList = this.ButtonImageList;
   PictureButton.ImageIndex = 0;
   .
   .
}

许可证 本文没有附带明确的许可,但可能包含文章文本或下载文件本身的使用条款。如果有疑问,请通过下面的讨论区联系作者。可以在这里找到作者可能使用的许可证列表。 本文转载于:http://www.diyabc.com/frontweb/news817.html

原文地址:https://www.cnblogs.com/Dincat/p/13456129.html