zoukankan      html  css  js  c++  java
  • 使用。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

  • 相关阅读:
    【Java123】enum枚举及其应用
    sql查询优化_慢查询
    9.4 如何实现属性可修改的函数装饰器?
    9.2 如何为被装饰的函数保存元数据?
    python的如何通过实例方法名字的字符串调用方法?
    9.1 如何使用函数装饰器 用装饰器解决重复计算问题
    asyncio 笔记
    python笔记截图
    list绑定
    表单数据交互
  • 原文地址:https://www.cnblogs.com/Dincat/p/13456129.html
Copyright © 2011-2022 走看看