我定义了一个CBitmap m_Bitmap;按网上介绍的几种办法实现了 弹起显示一个图片,按下显示另一个图片,现在我想实现鼠标放在按钮上时,按钮就显示按下时的那个图片,应该怎么实现呢?用ONMOUSEMOVE吗?怎么用呢?最好有例子参考一下的,帮帮忙吧!
解决方案 »
- FTP问题?
- 不知道哪里错了
- 如下释放DC,有问题没?
- 一个怪问题啊!!!!关于奇怪的控制台打印问题啊
- 安装visual studio 6.0问题
- CEditView GetEditCtrl( ).GetLine在2000下有返回,XP下不行?
- ..........关于动态加载的问题............
- 如何改变Button控件的背景颜色?
- 谁知道net send怎么在internet环境下实现?
- 各位大哥,帮帮小妹吧,:( http://www.csdn.net/expert/topicview1.asp
- VC2008开发的程序写配置文件在公司测试没问题, 到客户手里反映WIN7写的配置文件数据无效
- GetTreeCtrl的使用
pmyButton->Create(NULL, WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,
CRect(10,10,100,100), pParentWnd, 1);// Load the bitmaps for this button.
pmyButton->LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS, IDB_DISABLE);
在窗口的客户区创建一个位图按钮的步骤如下:
1. 为按钮创建1到4个位图。
2. 构造CBitmapButton对象。
3. 调用Create函数创建Windows按钮控件,并把它加到CBitmapButton对象上。
4. 调用成员函数LoadBitmaps加载位图资源。
在对话框控件中包含位图按钮的步骤如下:
1. 为按钮创建1到4个位图。
2. 创建一个对话框模板,其中有一个自定义的按钮放在需要位图按钮的位置。模板中按钮的大小无关紧要。
3. 把按钮的标题设置为“MYIMAGE”一类的字符串,并为按钮定义一个类似于IDC_MYIMAGE的代号。
4. 在应用的资源脚本中,分别为每个给该按钮创建的图像一个ID,ID的值为在步骤3中的标题后加上如下的一个字母——U、D、F或X,分别代表正常、按下、获得焦点和禁止存取状态下的按钮。例如,标题设为“MYIMAGE”时,ID就应该是字符串("MYIMAGEU"、"MYIMAGED"、"MYIMAGEF"和"MYIMAGEX")。位图的ID必须用引号括起来,否则资源编辑器就会为资源赋上一个整数值,MFC在加载图像时就会失败。
5. 在应用的对话框类(从类CDialog继承而来)中加上一个CBitmapButton成员对象。
6. 在CDialog对象的OnInitDialog例程中调用CBitmapButton对象的AutoLoad函数,参数是按钮的ID和CDialog对象的this指针。
如果想处理Windows的通知消息,如位图按钮控件发给它的父对象(通常是从CDialog继承来的)的BN_CLICKED消息,就要在从CDialog继承来的对象中加入消息映射入口以及处理每个消息的成员函数。CBitmapButton对象发出的通知和CButton对象发出的通知一样。
void CMyDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC ButtonDC;
CBitmap bitmapTrans;
BITMAP bmp;
CDC mem;
CRect rc;
//得到用于绘制按钮的DC
ButtonDC.Attach(lpDrawItemStruct->hDC);
//准备用于向按钮区域传输位图
mem.CreateCompatibleDC(&ButtonDC);
//获取按钮所占的矩形大小
rc=lpDrawItemStruct->rcItem;
//获取按钮目前所处的状态,根据不同的状态绘制不同的按钮
UINT state = lpDrawItemStruct->itemState;
//如果按钮已经得到焦点,绘制选中状态下的按钮
if(state&ODS_FOCUS)
{
bitmapTrans.LoadBitmap(IDB_BITMAP22);
bitmapTrans.GetBitmap(&bmp);
CBitmap *old=mem.SelectObject(&bitmapTrans);
//向按钮所在位置传输位图
//使用StretcnBlt的目的是为了让位图随按钮的大小而改变
ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
mem.SelectObject(old);
bitmapTrans.DeleteObject();
//设置文字背景为透明
ButtonDC.SetBkMode(TRANSPARENT);
//已选中
ButtonDC.DrawText("",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
else
{
bitmapTrans.LoadBitmap(IDB_BITMAP6);
CBitmap *old2 = mem.SelectObject(&bitmapTrans);
bitmapTrans.GetBitmap(&bmp);
CBitmap *old=mem.SelectObject(&bitmapTrans);
ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
ButtonDC.SetBkMode(TRANSPARENT);
//未选中
ButtonDC.DrawText("",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
mem.SelectObject(old2); bitmapTrans.DeleteObject();
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
可以实现鼠标点下按钮时改变位图,我想设置鼠标移到按钮上就改变,移开时又回到原来的位图,哪位大神帮帮忙,谢谢!!!!!!!!!!