热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CBitmap的对象怎么和资源分离

一个CBitmap的对象,已经bitmap.LoadBitmap(IDB_BITMAP1);之后怎么在和IDB_BITMAP1分离啊?我用bitmap.LoadBitmap(IDB_BIT
  一个CBitmap 的对象,已经 bitmap.LoadBitmap(IDB_BITMAP1);之后怎么在和IDB_BITMAP1分离啊?
我用bitmap.LoadBitmap(IDB_BITMAP2)的时候就出错,怎么办啊?

19 个解决方案

#1


试一下这个 Detach ( );

#2


bitmap.LoadBitmap(IDB_BITMAP1);
....
bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_BITMAP2)

#3


引用 2 楼 sokoley 的回复:
bitmap.LoadBitmap(IDB_BITMAP1);
....
bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_BITMAP2)

同上

#4


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();

}

还是不对,这个地方还是有问题,页面一出来就报错,注释上就没问题了

#5


试试不要用 Detach() ,
Attach Detach 这些,是让这个类与对应的句柄相关时用的.
例如用API建了个 HBITMAP,那可以用 CBitmap::Attach(HBITMAP)
CBitmap::Detach(HBITMAP) 意思是想在这个CBitmap 释构的时候,不要再去释放这个CBitmap里的m_hObject资源句柄.

#6



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
    ...
    ...

}

#7


不好意思,上面bitmap.Detach(); --》bitmap.DeleteObject();

#8


引用 7 楼 uc_fly 的回复:
不好意思,上面bitmap.Detach(); --》bitmap.DeleteObject();


Detach()肯定不对,bitmap.DeleteObject();我试了不好使啊~都试了~

#9


试过楼主的代码了.这样没问题的,可以切换不同的 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);

#10


按照您的方法,好了,不过换图的时候屏幕闪烁,于是我想是不是那个内存DC没有定义成成员变量的事。我把
CDC dcCompatible;改成了成员变量,结果一运行程序就出错,咋回事呢?

#11


楼主,你会不会是因为连续2次调用了dcCompatible.CreateCompatibleDC(pDC);这个,
所以出问题了?

#12



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);
}

这样再试一下吧.

#13


谢谢啊,终于解决了,哈哈,不过,屏幕还是像刚才一样闪烁呢~服!

#14


楼主,你是如何让屏幕重画的?因为你现在是对整个屏幕上图,所以不用有擦除的动作,直接画就行,会不会是你多了擦除的动作,所以闪?

#15


引用 5 楼 finder_zhang 的回复:
试试不要用 Detach() ,
Attach Detach 这些,是让这个类与对应的句柄相关时用的.
例如用API建了个 HBITMAP,那可以用 CBitmap::Attach(HBITMAP)
CBitmap::Detach(HBITMAP) 意思是想在这个CBitmap 释构的时候,不要再去释放这个CBitmap里的m_hObject资源句柄.

支持!!!

#16


谢谢finder_zhang大哥,哈哈,原来Invalidaate()干了挺多事呢,我之前是调用它的,我说怎么老闪烁呢!!!!

#17


楼主,你成功没有?结帖啦.

#18


让我看看100分的回复...

#19


看不见自己的回复呢...

#20


  • CBitmap拷贝函数(根据一个CBitmap对象创建另一个相同的CBitmap对象)
  • 在OnPaint()中使用CBitmap加载位图资源

推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
简单式赞美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有