注册 登录
编程论坛 VC++/MFC

[求助]设置图片按钮

不得不编 发布于 2006-11-22 20:38, 3335 次点击

我想编写一个图片按钮,我照着MSDN上面的步骤来做,但是没能成功实现。步骤:
1. 导入一幅图片,IDB_BITMAP1
2. 在按钮所在对话框中添加CBitmapButton类成员m_picBtn
3. 在对话框构造函数中初始化: m_picBtn.LoadBitmaps(IDB_BITMAP1);
4. 添加消息WM_INITDIALOG函数, 在里面添代码:m_picBtn.AutoLoad(IDC_PICBUTTON,this);
以上是我的步骤,其中无论变量m_picBtn是否与按钮关联,在运行中弹出对话框时会有运行错误,请问为什么?哪里错了吗?
请问怎样通过继承CButton类,重写DrawItem函数给按钮画图?有例子的请发dream1001fly@126.com,THANKS~

7 回复
#2
朦朦胧胧2006-11-23 13:34

把按钮style里的owner draw 选上,如果你的按钮的caption是Button1,那么把导入的位图的ID改为"Button1U"(双引号不能少),
m_picBtn.LoadBitmaps(IDB_BITMAP1);这句话不用了,再按照你的第4步做.运行时,按钮总是一个状态,因为那个"Button1U"是表示按钮正常状态,可再导入一个位图,将ID改为"Button1D"即可,运行,在按钮按下状态时,显示的图片将是第二个图片.

#3
不得不编2006-11-23 13:53

不行啊,什么意思?没看懂,不是说位图不用导入了吗,怎么又会把位图ID改为Button1U,后面还加个U?看不明白

#4
Bekky2006-11-23 14:22
直接加图片可能不行,可能要自绘,就是要重载drawitem.
一下是一个自绘按钮的例子。
只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2006-11-23 14:24:15编辑过]

#5
不得不编2006-11-23 15:12

我猜可以直接贴吧,里面的SetBitmap()和GetBitmap()函数我还没搞清楚怎么用,而且用CBitmapButton类的对象来写更方便,可惜我还没成功,步骤如我所写的

#6
朦朦胧胧2006-11-23 17:12
以下是引用不得不编在2006-11-23 13:53:29的发言:

不行啊,什么意思?没看懂,不是说位图不用导入了吗,怎么又会把位图ID改为Button1U,后面还加个U?看不明白

第一步:在资源编辑器里import 两个bmp格式图片图1,图2
第二步:打开按钮属性对话框,在style属性页里选中owner draw
第三步:打开图片1的属性对话框,把ID改为"***U"(U表示Up,图一用于按钮正常状态),
同样把图2的ID改为"***D"(用于按钮按下状态)(假设按钮的caption为***,双引号不可少)
第四步:在按钮所属的对话框的类中,加入Protected:CBitmapButton m_pBB;
第五步:在对话框的初始化函数OnInitDialog()中加入:m_pBB.AutoLoad(IDC_BUTTON1);(假如你的按钮的ID为IDC_BUTTON1)
第六步:build运行,按钮为图1,点击按钮,显示图2

#7
不得不编2006-11-23 20:44
嗯~OK了~THANKS~啊,还有我想问下如果通过继承CButton类重写DRAWITEM的方法来实现是怎么做的啊?是不是先获得按钮区域坐标跟大小,然后用兼容DC贴图上去?
#8
shanchen222010-10-23 13:05
不懂
1