在网上查了很多资料,大都语焉不详,今天自己做了个位图按钮做测试,特将网上的资料整理如下:
CBitmapButton是一个MFC内置的按钮类,提供图片按钮的功能,并且支持在不同状态下显示不同图片。其使用方法比较简单,比CButton更美观,比其它的第三方Button类更简洁,因此,制作位图按钮时经常需要用到它。
1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性.
按钮右键-->Styles-->Owner draw
2、在程序中定义一个CBitmapButton成员变量。
注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,
这么做并不能将按钮直接映射为 CBitmapButton类的对象,反而会出现初始化错误
3、使用CBitmapButton::LoadBitmaps装载各种状态的图片,
使用CBitmapButton::SubclassDlgItem关联到想要的按钮,
使用CBitmapButton::SizeToContent函数使按钮适合图片大小。
注意Loadbitmaps一定要在关联到按钮之前进行!
首先,选中按钮的owner Draw属性,在资源中加载两副*.bmp格式的位图,
然后在对话框类中加入:
CBitmapButton m_btnX1; //定义变量,必须放在函数外面才能正常实现 BOOL CXXXXXXX::OnInitDialog() { CDialog::OnInitDialog(); 8m_btnX1.LoadBitmaps(IDB_XXXX_UP,IDB_XXXX_DOWN); //这里是两副位图,鼠标按下和弹起, // 也可以只加一个ID资源; m_btnX1.SubclassDlgItem(IDC_DASEN_X1,this); m_btnX1.SizeToContent(); }
此方法与下面方法二的主要区别在于:
方法一不需要对位图及按钮的命名做关联要求
而方法二则需要对位图与按钮直接做命名关联
CBitmapButton的简易攻略如下:
1.在MFC Dialog工程中,在一个Dialog中添加一个按钮,设置ID为IDC_BUTTON_TEST, Caption为BUTTON_TEST,并且把Style中的Owner Draw属性选上。(注意Caption命名和ID命名的关系)
2.添加按钮的图片到资源中
假设图片为以下几个:
test_up.bmp 正常状态时的按钮图片
test_down.bmp 鼠标按下时的按钮图片
test_focused.bmp 鼠标点击过后的按钮图片
test_disable.bmp 按钮失效后的图片
则分别设置其ID为:(注意,一定要左右都带双引号)
"BUTTON_TESTU"
"BUTTON_TESTD"
"BUTTON_TESTF"
"BUTTON_TESTS"
3. 在程序中定义一个CBitmapButton成员变量。
注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,
这么做并不能将按钮直接映射为 CBitmapButton类的对象,反而会出现初始化错误
4. 在OnInitDialog()函数中,将位图与具体按钮关联,注意关联的具体按钮的ID与Caption 及位图资源ID必须符合第1、2条的规范。
m_Button.AutoLoad(IDC_BUTTON_TEST,this);
注意,使用此方法,不必用LoadBitmap()加载资源,因为编译器自动根据命名规范,将位图资源与具体按钮关联起来了。
CBitmapButton m_Button;//必须放在函数外面才能正常实现 BOOL CXXXXXXX::OnInitDialog() { CDialog::OnInitDialog(); m_Button.AutoLoad(IDC_BUTTON_TEST,this);//ID为IDC_BUTTON_TEST的按钮的Caption为:BUTTON_TEST}
参考资料:
http://blog.sina.com.cn/s/blog_44e571d70100080o.html
http://blog.163.com/yanghua9981@126/blog/static/262925712007623105417327/
http://www.itqun.net/content-detail/123911.html
http://www.cnblogs.com/qqingmu/archive/2007/09/06/884840.html
http://topic.csdn.net/t/20021107/14/1156670.html
http://blog.csdn.net/hityct1/archive/2009/02/03/3859286.aspx
http://blog.sina.com.cn/s/blog_4d90492b01000f2h.html
如果此文对您有所帮助,还望点击一下以下网站:
360导航
2345导航