自绘位图按钮

转载 2013年12月03日 10:05:59

转自http://blog.csdn.net/xianglitian/article/details/1728242

按钮是最常用的控件之一,也是界面开发中装点界面、美化界面的重要元素。实现按钮的自绘制,在按钮上贴图将是界面大大美观。
    我做的这个按钮类实现的就是自绘制的位图按钮。与MFC提供的CBitmapButton不同,这个类实现了正常的状态,鼠标经过的状态,鼠标按下的状态,和禁用的状态,也就是现在一般按钮都具有的四态。我们知道,windows下的按钮具有5态,而我没有实现的第五态选中态其实用处也不大,不会影响总体的效果。
    简单说一下我作的这个类,CWEBmpButton重载了DrawItem函数,所有绘图工作都是在这里完成的。但要注意的是,要激活DrawItem函数就必须设值按钮的BS_OWNERDRAW属性。我将BS_OWNERDRAW属性设置的语句写在了PreSubclassWindow函数中,以保证DrawItem函数的调用。这里插一句,自绘的东西做的多了我发现最好将绘制代码写在OnPaint函数中,这样对控件属性的要求弱一些。不过,DrawItem的参数lpDrawItemStruct中会有较为丰富的控件信息,这只要解析出来即可,而在OnPaint中获取这些信息要多费一些代码,所以两种方式各有利弊,如何取舍还要视情况而定。
    知道了在哪里画只是完成了第一步,但这也是最重要的一步。因为只要知道用什么函数画大家就都可以绘制自己的控件了,而且如果我们都用图片作自绘的话绘制代码实际上只是贴图,其代码量会大大降低。不过我还是要按钮步骤介绍一下接下来的工作,那就是区分状态。我们自绘的目的一方面是要让控件好看,另一方面就是要让控件活起来。所以区分空间的不同状态,以不同的方式绘制就显得很重要。在windows环境下,几乎所用的控件都要用鼠标去操作,而也就是鼠标使他们有了不同的状态。因此我设了一个变量m_nButtonState用来记录不同的按钮状态,在OnMouseHover、OnLButtonDown和OnLButtonUp中修改它的值,这样就使按钮活了起来。
    由于提供了源文件,我在文章里就不过多的提及程序了。如果大家发现代码有什么问题或有什么需要改进的地方希望能够提出来,我们一起讨论、共同提高。

 

源文件 

MFC的自绘位图按钮

下载源代码 总体效果图: 一.前言     以前对位图自绘按钮很迷茫,一直想对位图自绘按钮有个了解,经过一段时间的搜集和开发,自己重写了一个按钮位图类COwnerdrawBitmapButt...

WTL 三态位图按钮

  • 2009年04月18日 11:07
  • 38KB
  • 下载

MFC的对话框中创建位图按钮

1.可新建一个类ImageButton(继承自CButton),并设置其风格为自绘: ModifyStyle(0,BS_OWNERDRAW);ImageButton.h:class ImageButt...

《VC 位图按钮CBitmapButton的使用》

  • 2017年02月17日 14:26
  • 2.04MB
  • 下载

C# 自定义位图按钮

  • 2010年05月11日 11:00
  • 31KB
  • 下载

利用CBitmapButton类实现位图按钮的两种方法

利用CBitmapButton类实现位图按钮的两种方法:方法一: 1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性.       按钮右键-->Styles-...

VC位图按钮相关实现方法总结

位图按钮的实现方法: 首先,我们创建一个基于对话框的应用程序CmyDialog   ; Ι.MFC的CBitmapButton类,这也是最简单的功能最强的位图按钮。我们可以采取如下的步骤: 1. 为按...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自绘位图按钮
举报原因:
原因补充:

(最多只允许输入30个字)