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

  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/Dincat/p/13449819.html
Copyright © 2011-2022 走看看