多状态按钮 button vc c++ MFC CBitmapButton

15 篇文章 0 订阅
3 篇文章 0 订阅

本文使用vc6.0 MFC程序实现自定义的多状态button。vc9.0(即vs2008)下,去掉stdafx.h文件中的#define _WIN32_WINNT 0x0400 也可以运行(有个warning)。

由于只是示例,并没有注意接口,您可以自己改;自己的美工水平不行,您可以自己更改bitmap资源。

介绍了三种多状态按钮 :

1)三状态按钮 

     鼠标在button上;鼠标在button外;鼠标按下button

2)六状态按钮

     在1)的基础上增加了对应的获得焦点的三种情况

3)MFC自带的CBitmapButton类

    有四种状态:up,down,focus,disabled。控件风格不同,状态个数不同,具体可看msdn。

 

代码可到此处下载:

 http://download.csdn.net/source/986965

 

(一)三状态按钮

 

1)定义继承自CButton的子类CyctBitmapButton。

2)三状态需要三个位图资源

    装在和卸载位图资源:

3)初始化button

    窗口初始化后需要调用Init()函数。布尔值变量m_fIsInit确保button只初始化一次。

4)处理鼠标响应函数(这是关键的)

 处理了四种鼠标消息WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSELEAVE:

其中WM_MOUSELEAVE消息响应映射是手工添加的。

在头文件中DECLARE_MESSAGE_MAP()前添加一句:

在对应的cpp文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加一句:

WM_MOUSELEAVE消息是由函数TrackMouseEvent产生的,当鼠标离开button控件就会触发此消息。

 

函数SetBitmap定义如下(具体的看源代码吧):

5)如果想去掉按钮button在获得焦点时的虚框,重载WM_SETFOCUS消息,并且置函数体为空即可。

 

(二)六状态按钮

       与(一)类似,不再叙述。

 

(三)MFC自带的CBitmapButton类

使用很简单,在对话框类的OnInitDialog内装载四个位图资源即可:

 

 

总结:多状态按钮主要是使用函数TrackMouseEvent函数实现的。本文只是示例,很简陋。你也可以下载CButtonST来看看,方法基本一样。下载区有:

http://search.download.csdn.net/search/cbuttonst

 

 

 

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MFC CBitmapButton可以通过自绘按钮的方式来实现不同状态按钮效果,常见的状态有正常、按下、悬停等。下面介绍使用MFC CBitmapButton自绘按钮的几种状态及设置反应时间的方法: 1. 正常状态:在按钮未被按下、悬停或失去焦点时的状态。可以通过重载CBitmapButton的DrawItem函数,在绘制按钮的时候根据需要绘制不同的背景和图来实现自定义的正常状态。设置反应时间可以通过响应按钮的WM_LBUTTONUP消息来实现,即在按钮被松开时执行相应的操作。 2. 按下状态:在按钮被按下时的状态。可以通过重载CBitmapButton的OnLButtonDown和OnLButtonUp函数,在按钮被按下和松开时分别绘制不同的背景和图来实现自定义的按下状态。设置反应时间可以在响应WM_LBUTTONUP消息时执行相应的操作。 3. 悬停状态:在鼠悬停在按钮上时的状态。可以通过重载CBitmapButton的OnMouseMove和OnMouseLeave函数,在鼠进入和离开按钮时分别绘制不同的背景和图来实现自定义的悬停状态。设置反应时间可以在响应WM_LBUTTONUP消息时执行相应的操作,或者在响应WM_MOUSEHOVER消息时执行相应的操作。 4. 禁用状态:在禁用按钮时的状态。可以通过重载CBitmapButton的DrawItem函数,在绘制按钮的时候根据需要绘制不同的背景和图来实现自定义的禁用状态。设置反应时间不可用,因为在此状态下无法响应任何鼠事件。 总之,使用MFC CBitmapButton自绘按钮的关键是重载相应的函数,并根据需要绘制不同的背景和图来实现自定义的按钮效果。设置反应时间可以在响应相应的鼠消息时执行相应的操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值