VC自定义图片按钮控件的实现

本文详细介绍了在VC中如何自定义图片按钮控件,包括从CButton类派生新类CMyBtn,实现动态加载图片、响应鼠标事件、重绘按钮以及向父窗口发送自定义消息等功能。通过重载Create、PreSubclassWindow、DrawItem等函数,以及设置和处理鼠标移动和点击事件,使得图片按钮能够根据鼠标状态改变显示,并在单击时传递特定消息给父窗口。
摘要由CSDN通过智能技术生成

VC自定义图片按钮控件的实现

 

(转载)以前编写过五子棋程序的框架,整个程序的背景都是我用photoshop画的,当然也包括几个按钮。

说是按钮,其实就是图片上的按钮,跟vc的按钮控件是完全不同,但是当时我想让画的按钮也响应鼠标动作比如鼠标移动到按钮上,鼠标单击等,方法很笨,就是在主对话框中对鼠标的移动和单击动作进行检测,如果发生位置位于按钮区,就在“按钮”区另贴一幅图,以实现鼠标在其上的效果,单击类似。

对于多个按钮,就要检测多个区域,程序十分复杂,而且性能很差。

于是想改写vc的CButton类,来实现我的功能。在网上查了很多资料,都是说怎么在按钮上显示一副图片,能显示但是还有着原来按钮的边框,虚线。还得自己动手写。

要求:

1.动态生成一个图片按钮,函数输入两幅图片的ID,及按钮坐标和大小,最为重要的是指定单击它要向父窗口传递的消息值(自定义)

2.当鼠标在经过按钮上时图片按钮变为另外一幅图,跟正常状态下的图像形成对比

3.当鼠标单击这个按钮,父窗口得到初始化时给这个窗口指定的消息值,以便在有多个按钮存在时进行区分响应

过程:

1.从CButton类派生CMyBtn类,增加如下变量:

enum {STATE_MOUSEON, STATE_NORMAL}; // 定义按钮状态
 CBitmap m_pBmp1, m_pBmp2;//Load两幅图片
 CRect m_Rc; //保存按钮客户区
 int m_State; // 按钮所处状态 为enum的两个值,代表鼠标在按钮上和正常情况下
 BOOL m_IsTimerOn; // 定时器开否,用于判断鼠标跟按钮的相对位置
 POINT m_CursorPos; // 鼠标位置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值