本文是基于对话框的
博文基于 无幻 的博文为基础写的 http://blog.csdn.net/akof1314/article/details/4951836
笔者使用mfc撑死2个星期,不过这是有c++基础的前提下接触mfc,昨天看到了网上对qt creator的评论,感觉好高大上,回去试了一下后发现,qt需要mfc的基础,若是直接接触qt的话会比较难,毕竟mfc是在vs的平台下,大家学起来会比较顺手。
回到正题,今天研究了下怎么使用mfc中的位图按键,发现实现方法挺多,但是对于小白来说,很多作者认为简单的都会略过,恰巧那些简单的就是我不会的,结果又看不懂。除了mfc自有的CBitmapButton外,在网上还看到有关于CButtonST的使用,应该是会比CBitmapButton简单,笔者看的是CBitmapButton,那这里就不讲CButtonST。
两位csdn博主对CButtonST使用的链接:
DoubleLi: http://www.cnblogs.com/lidabo/archive/2012/12/17/2821122.html
wqvbjhc: http://blog.csdn.net/wqvbjhc/article/details/12580669
首先 会用到以下CBitmapButton类的函数
LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS,IDB_DISABLE);
//载入图片 IDB_UP, IDB_DOWN, IDB_FOCUS,IDB_DISABLE 这四个均为bitmapID
BOOL LoadBitmaps( LPCTSTR lpszBitmapResource, LPCTSTR lpszBitmapResourceSel = NULL, LPCTSTR lpszBitmapResourceFocus = NULL, LPCTSTR lpszBitmapResourceDisabled = NULL );
bitmap的载入
回到资源视图就可以看到 资源视图打开的方法:视图-》其他窗口-》资源视图
SubclassDlgItem(按钮ID, this);//关联按钮
SizeToContent();//让按钮随图片大小变化
GetDlgItem(按钮ID)->EnableWindow(FALSE);//开启按钮的禁止状态
现在开始做
1.在对话框出拖入一个按钮,,其ID为IDC_BUTTON1
2.设置按钮属性中的Owner Draw为TRUE
3.在::OnInitDialog();前添加 CBitmapButton m_btnX1;//必须放在函数外面才能正常实现
4.导入按钮位图,这里四幅图大小要一致,以下是四种状体的按钮,若读者要实验这次的设计的话,可以右键另存为,然后用“画图”把png格式的另存为bmp格式的。在资源视图,右键“添加资源”,“导入”以下图片:
5.初始化工作,在对话框的OnInitDialog()函数里面添加以下代码:
m_btnX1.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS,IDB_DISABLE);//
// 也可以只加一个ID资源;
m_btnX1.SubclassDlgItem(IDC_BUTTON_TEST2, this);
m_btnX1.SizeToContent();
到这里已经完成了位图按钮的实现,编译运行可以看到结果。
其实这个时候你能看到后三幅图的的效果,为什disable的看不到,是因为这个禁止的状态你没有打开,打开需要
GetDlgItem(按钮ID)->EnableWindow(FALSE); //为false是是开启禁止状态,为true时则是关闭状态
这时候四个图标你都能看到了。
如果你想做鼠标移动到按钮上,按钮会变其他图案的效果,请看 无幻 http://blog.csdn.net/akof1314/article/details/4951836/;
本文用到的资料: 只想说一句 csdn太强大了。
http://blog.csdn.net/leixiaohua1020/article/details/12753967
http://blog.csdn.net/akof1314/article/details/4951836/
http://bbs.csdn.net/topics/100184465
https://msdn.microsoft.com/en-us/library/6y6acs49(v=vs.120).aspx