CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请教一下位图按钮为什么显示不了图片?

楼主afxboy(afxboy)2003-08-04 07:27:44 在 VC/MFC / 基础类 提问

新建一个位图按钮类,添加一个这样的函数。  
  void   DrawImage()  
  {  
  CPaintDC   dc(this);    
                    CBitmap   myBitmap;  
  myBitmap.LoadBitmap(IDB_BITMAP1);    
  CDC   MemDC;    
                    MemDC.CreateCompatibleDC(pDC);  
  CBitmap   *pOldBitmap=MemDC.SelectObject   (&myBitmap);    
                    dc.StretchBlt(0,0,20,20,&MemDC,0,0,16,16,SRCCOPY;   MemDC.SelectObject   (   pOldBitmap   );  
       
  }   Create一个对象,并显示出按钮,在另外一个按钮的单击事件中   调用DrawImage();这个按钮是不会显示图片的,怎么回事?代码有错?在代码里面加入  
  Invalidate(TRUE);InvalidateRect..ReDrawWindow都是无效的,在OnDrawItem里面加入上面代码也是无效的,我应该怎么解决?  
  问题点数:0、回复次数:13Top

1 楼lblyy76(yibo)回复于 2003-08-04 08:23:12 得分 0

pDC改成&dc试一试Top

2 楼afxboy(afxboy)回复于 2003-08-04 08:26:29 得分 0

我上面的copy错了,代码里面本来都是dc的,现在改回&dc,也还是不行Top

3 楼laodie(张三)回复于 2003-08-04 08:45:18 得分 0

CPaintDC一般用于OnPaint()消息处理,你改用CClientDc.  
  建议换  
  pDC->DrawState  
  试一下。Top

4 楼afxboy(afxboy)回复于 2003-08-04 08:53:44 得分 0

把CClientDC也一样,我式过很多方法了。  
  现在更怪了。我重载DrawItem,把上面代码加进去。重载PreSubClassWindow,把 ModifyStyle(0,BS_OWNERDRAW);   加进去。  
  现在CImageButton   *pBt;  
  pBt=new   CImageButton();  
  pBt->Create("O",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,rect,this,IDC_IMAGEBUTTON);  
  pBt->ShowWindow(TRUE);  
  结果产生的按钮看不见了。但这个按钮还可以响应信息。Top

5 楼DeautyFan(可可魔仙)回复于 2003-08-04 08:54:13 得分 0

HDC   hBMDC;  
  HBITMAP   hBitmap,hBitmapOld;  
   
  hBitmap=NULL;  
  SetBkMode(hdc,   TRANSPARENT);  
   
  hBitmap   =   LoadBitmap(hInst,MAKEINTRESOURCE(IDB_PREPARE_2));//-1  
   
  hBMDC   =   CreateCompatibleDC(hdc);    
  hBitmapOld=(HBITMAP)SelectObject(hBMDC,hBitmap);    
                           
  StretchBlt(hdc,0,0,PIC_PREPARE_WIDTH,PIC_PREPARE_HEIGHT,hBMDC,0,0,  
              PIC_PREPARE_WIDTH,PIC_PREPARE_HEIGHT,SRCCOPY);  
   
  SelectObject(hBMDC,hBitmapOld);  
  DeleteDC(hBMDC);  
  DeleteObject(hBitmap);Top

6 楼afxboy(afxboy)回复于 2003-08-04 09:40:58 得分 0

大虾你上面的代码也不起作用啊。  
  Top

7 楼canoe_eyes(阿里)回复于 2003-08-04 09:44:52 得分 0

设置按钮的属性,选择自己拥有(own)。Top

8 楼lygfqy(风清扬)回复于 2003-08-04 09:47:53 得分 0

我想是不是应该发送消息,来实现位图的显示!  
  按钮控件有自己的绘制处理函数,所以自己些写的并不一定相应呢Top

9 楼afxboy(afxboy)回复于 2003-08-04 09:57:28 得分 0

:   canoe_eyes(阿里)   (   ):我这个不是对话框的按钮  
  lygfqy(风清扬)   (   发送消息会出现xxx错误。所以我放弃那种方式。Top

10 楼blueblood7()回复于 2003-08-04 10:02:05 得分 0

要在按钮上显示位图,要把按钮的风格设为   BS_OWNERDRAW。  
  一般要显示三个位图,即缺省时,鼠标选中时和鼠标按下时。  
  需要用到的消息有主窗体的   WM_DRAWITEM   消息,按钮的   WM_MOUSEMOVE、WM_MOUSELEAVE。  
   
  如果用   MFC,   只是简单的显示位图,在按钮的属性中选择   Owner   draw,在自定义按钮类的   OnPaint   中进行绘制,并且重载   DrawItem   方法即可。Top

11 楼afxboy(afxboy)回复于 2003-08-04 10:30:51 得分 0

bluebood7大哥,你是说必须重载WM_DRawItem.MouseMove,WM_MousLeave???Top

12 楼afxboy(afxboy)回复于 2003-08-04 17:37:21 得分 0

55555555555555555,怎么这么简单的问题姐姐不了呢Top

13 楼afxboy(afxboy)回复于 2003-08-04 18:55:24 得分 0

这个问题朝难阿Top

相关问题

  • 无法显示图片按钮??????
  • 按钮图片
  • 图片按钮
  • 求按钮图片
  • 如何在vb的按钮(Button)控件显示一幅图片
  • 如何把图片显示在消失的按钮下面?
  • 如何用按钮控制图片的显示和隐藏?
  • 怎样才可以按钮的左边显示图片,右边显示文字!
  • 我把reset按钮用图片显示了,可是怎样在实现reset按钮的功能那?
  • 我想把submit按钮用图片显示,并且怎样实现submit按钮的功能?

关键词

  • 代码
  • 消息
  • dc
  • 按钮
  • hbmdc
  • hbitmap
  • hbitmapold
  • 重载
  • pbt
  • 显示

得分解答快速导航

  • 帖主:afxboy

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo