CBitmapButton类实现图形按钮

本文介绍了如何使用CBitmapButton类创建图形按钮,并提供了三种方法来设置按钮的不同状态图片,包括正常显示、按下、获得焦点及不可用状态。通过具体实例展示了在VC6环境下设置按钮样式及加载图片的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除了CButtonST与CShadeButtonST可以很好的实现各种按钮的效果外,使用CBitmapButton类也是个不错的选择。

CBitmapButton类继承自CButton类,它可以为图形按钮指定四张图片,分别对应于按钮的四种不同的状态:

正常显示(Up),鼠标按下(Down),获得焦点(Focused),不可用(Disabled),其中,正常显示(Up)状态的图片是必须的,其他三张图片是可选的。

最容易被忽视的是,按钮的style类型必须指定为BS_OWNERDRAW 。

以下是利用CBitmapButton实现图形按钮的实例:

第一种方法:

(一)在VC6下新建一对话框工程,在对话框界面上拉出一按钮控件

指定按钮的Style为Owner Draw,即程式中得BS_OWNERDRAW样式。

利用ClassWizard为按钮关联CButton类变量,然后将CButton类型手动改为CBitmapButton。

(二)导入指定按钮四种状态的图片

以下只导入了3张图片,分别对应Up,Down,Focused

(三)在对话框的OnInitDialog函数中添加如下代码

LoadBitmaps加载状态图片,注意顺序为Up,Down,Focused,Disabled。

1 // TODO: Add extra initialization here  
2 m_btnBitmap.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);  //Disabled状态的图片没有制作  
3 m_btnBitmap.SizeToContent();    //调整按钮大小为图片大小  

第二种方法:利用SubclassDlgItem

在界面中拉出一按钮控件后,不用关联变量,指定按钮的Style为Owner Draw,然后同上一样导入四张状态图片。创建CBitmapButton对象(注意不要创建函数的局部变量,否则在函数执行完毕时就销毁了),最好创建为对话框的成员变量,在对话框的OnInitDialog初始化函数中用LoadBitmaps加载图片,再利用SubclassDlgItem方法将该CBitmapButton与刚开始在界面上拉出的控件关联。按钮控件自动调整为和图片一样大小。

代码如下:

1 m_btnBitmap002.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);  
2 m_btnBitmap002.SubclassDlgItem(IDC_BTN_TESTAUTO, this);  
3 //CBitmapButton test;   //不可这样定义局部变量再关联  
4 //test.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);  
5 //test.SubclassDlgItem(IDC_BTN_TESTAUTO, this);  

第三种方法:应用CBitmapButton的AutoLoad方法自动为按钮加载图片

BOOL AutoLoad(UINT nID, CWnd* pParent);

我们不用指定图片的ID,那么程序是采取怎样的规则去加载图片的呢?

规则:如果按钮控件的Caption为Test,则四张位图的ID应分别为“TestU”,“TestD”,“TestF”,“TestX”,分别对应Up,Down,Focused,Disabled状态。注意:""也是ID的一部分。

所以步骤为:
(一)在对话框中拉出按钮控件,Caption改为Test,指定按钮的Style为Owner Draw。

(二)定义对话框的成员变量CBitmapButton   m_btnBitmap003;

(三)导入四张状态位图,ID分别改为“TestU”,“TestD”,“TestF”,“TestX”。

(四)在对话框的OnInitDialog中调用AutoLoad方法

1 m_btnBitmap003.AutoLoad(IDC_BTNTEST, this);  

这种方法按钮也会自动调整为和位图一样大小。


得益于http://www.cnblogs.com/Hisin/archive/2012/02/27/2370636.html。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值