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

afxboy 2003-08-04 07:27:44
新建一个位图按钮类,添加一个这样的函数。
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里面加入上面代码也是无效的,我应该怎么解决?
...全文
81 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
afxboy 2003-08-04
  • 打赏
  • 举报
回复
bluebood7大哥,你是说必须重载WM_DRawItem.MouseMove,WM_MousLeave???
wujpbb7 2003-08-04
  • 打赏
  • 举报
回复
要在按钮上显示位图,要把按钮的风格设为 BS_OWNERDRAW。
一般要显示三个位图,即缺省时,鼠标选中时和鼠标按下时。
需要用到的消息有主窗体的 WM_DRAWITEM 消息,按钮的 WM_MOUSEMOVE、WM_MOUSELEAVE。

如果用 MFC, 只是简单的显示位图,在按钮的属性中选择 Owner draw,在自定义按钮类的 OnPaint 中进行绘制,并且重载 DrawItem 方法即可。
afxboy 2003-08-04
  • 打赏
  • 举报
回复
: canoe_eyes(阿里) ( ):我这个不是对话框的按钮
lygfqy(风清扬) ( 发送消息会出现xxx错误。所以我放弃那种方式。
lygfqy 2003-08-04
  • 打赏
  • 举报
回复
我想是不是应该发送消息,来实现位图的显示!
按钮控件有自己的绘制处理函数,所以自己些写的并不一定相应呢
canoe_eyes 2003-08-04
  • 打赏
  • 举报
回复
设置按钮的属性,选择自己拥有(own)。
afxboy 2003-08-04
  • 打赏
  • 举报
回复
大虾你上面的代码也不起作用啊。
无敌魔仙 2003-08-04
  • 打赏
  • 举报
回复
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);
afxboy 2003-08-04
  • 打赏
  • 举报
回复
把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);
结果产生的按钮看不见了。但这个按钮还可以响应信息。
laodie 2003-08-04
  • 打赏
  • 举报
回复
CPaintDC一般用于OnPaint()消息处理,你改用CClientDc.
建议换
pDC->DrawState
试一下。
afxboy 2003-08-04
  • 打赏
  • 举报
回复
我上面的copy错了,代码里面本来都是dc的,现在改回&dc,也还是不行
lblyy76 2003-08-04
  • 打赏
  • 举报
回复
pDC改成&dc试一试
afxboy 2003-08-04
  • 打赏
  • 举报
回复
这个问题朝难阿
afxboy 2003-08-04
  • 打赏
  • 举报
回复
55555555555555555,怎么这么简单的问题姐姐不了呢

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧