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


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

  • 相关阅读:
    leetcode74
    leetcode59
    leetcode1283
    0079. Word Search (M)
    0067. Add Binary (E)
    0203. Remove Linked List Elements (E)
    用async 解放你的大脑
    Python 类属性和方法
    Python 类装饰器
    Python 装饰器
  • 原文地址:https://www.cnblogs.com/Dincat/p/13449819.html
Copyright © 2020-2023  润新知