CBitmap 的对象 怎么和资源分离

jingyuge 2010-06-02 09:19:25
一个CBitmap 的对象,已经 bitmap.LoadBitmap(IDB_BITMAP1);之后怎么在和IDB_BITMAP1分离啊?
我用bitmap.LoadBitmap(IDB_BITMAP2)的时候就出错,怎么办啊?
...全文
197 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
landy2017 2011-11-16
  • 打赏
  • 举报
回复
看不见自己的回复呢...
landy2017 2011-11-16
  • 打赏
  • 举报
回复
让我看看100分的回复...
finder_zhang 2010-06-09
  • 打赏
  • 举报
回复
楼主,你成功没有?结帖啦.
jingyuge 2010-06-09
  • 打赏
  • 举报
回复
谢谢finder_zhang大哥,哈哈,原来Invalidaate()干了挺多事呢,我之前是调用它的,我说怎么老闪烁呢!!!!
china_ccboy 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 finder_zhang 的回复:]
试试不要用 Detach() ,
Attach Detach 这些,是让这个类与对应的句柄相关时用的.
例如用API建了个 HBITMAP,那可以用 CBitmap::Attach(HBITMAP)
CBitmap::Detach(HBITMAP) 意思是想在这个CBitmap 释构的时候,不要再去释放这个CBitmap里的m_hObject资源句柄.
[/Quote]
支持!!!
finder_zhang 2010-06-02
  • 打赏
  • 举报
回复
试过楼主的代码了.这样没问题的,可以切换不同的 IDB_BITMAP1,2

if (!m_bitmap.m_hObject)//没LOADBITMAP前不可以做下面的,否则会报错
{
return;
}
CRect rect;
BITMAP bmp;
m_bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&m_bitmap);
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

//其他的按键来切换要显示的图,没问题的.
m_bitmap.DeleteObject();
m_bitmap.LoadBitmap(IDB_BITMAP2);

m_bitmap.DeleteObject();
m_bitmap.LoadBitmap(IDB_BITMAP1);
jingyuge 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 uc_fly 的回复:]
不好意思,上面bitmap.Detach(); --》bitmap.DeleteObject();
[/Quote]

Detach()肯定不对,bitmap.DeleteObject();我试了不好使啊~都试了~
uc_fly 2010-06-02
  • 打赏
  • 举报
回复
不好意思,上面bitmap.Detach(); --》bitmap.DeleteObject();
uc_fly 2010-06-02
  • 打赏
  • 举报
回复

void CSLotteryView::OnDraw(CDC* pDC)
{
CSLotteryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CBitmap bitmap;//
bitmap.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1

CRect rect;
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
bitmap.Detach(); //
bitmap.LoadBitmap(IDB_BITMAP2); //IDB_BITMAP2
...
...

}
finder_zhang 2010-06-02
  • 打赏
  • 举报
回复
试试不要用 Detach() ,
Attach Detach 这些,是让这个类与对应的句柄相关时用的.
例如用API建了个 HBITMAP,那可以用 CBitmap::Attach(HBITMAP)
CBitmap::Detach(HBITMAP) 意思是想在这个CBitmap 释构的时候,不要再去释放这个CBitmap里的m_hObject资源句柄.
jingyuge 2010-06-02
  • 打赏
  • 举报
回复
void CSLotteryView::OnDraw(CDC* pDC)
{
CSLotteryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
BITMAP bmp;
m_bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&m_bitmap);
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
// m_bitmap.Detach();
//m_bitmap.DeleteObject();

}

还是不对,这个地方还是有问题,页面一出来就报错,注释上就没问题了
soswaidao 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sokoley 的回复:]
bitmap.LoadBitmap(IDB_BITMAP1);
....
bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_BITMAP2)
[/Quote]
同上
sokoley 2010-06-02
  • 打赏
  • 举报
回复
bitmap.LoadBitmap(IDB_BITMAP1);
....
bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_BITMAP2)
lanneret1234 2010-06-02
  • 打赏
  • 举报
回复
试一下这个 Detach ( );
finder_zhang 2010-06-02
  • 打赏
  • 举报
回复
楼主,你是如何让屏幕重画的?因为你现在是对整个屏幕上图,所以不用有擦除的动作,直接画就行,会不会是你多了擦除的动作,所以闪?
jingyuge 2010-06-02
  • 打赏
  • 举报
回复
谢谢啊,终于解决了,哈哈,不过,屏幕还是像刚才一样闪烁呢~服!
finder_zhang 2010-06-02
  • 打赏
  • 举报
回复

void CSdiDemo6View::OnDraw(CDC* pDC)
{
CSdiDemo6Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (!m_bitmap.m_hObject)
{
return;
}
CRect rect;
BITMAP bmp;
m_bitmap.GetBitmap(&bmp);
if (!m_dcCompatible.m_hDC)
{
m_dcCompatible.CreateCompatibleDC(pDC);
}
m_dcCompatible.SelectObject(&m_bitmap);
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
}

这样再试一下吧.
finder_zhang 2010-06-02
  • 打赏
  • 举报
回复
楼主,你会不会是因为连续2次调用了dcCompatible.CreateCompatibleDC(pDC);这个,
所以出问题了?
jingyuge 2010-06-02
  • 打赏
  • 举报
回复
按照您的方法,好了,不过换图的时候屏幕闪烁,于是我想是不是那个内存DC没有定义成成员变量的事。我把
CDC dcCompatible;改成了成员变量,结果一运行程序就出错,咋回事呢?

16,467

社区成员

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

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

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