一个关于CBitMap的问题

从昨天开始就一直在调试绘图问题,当时有一个截屏函数是用来截获当前屏幕制定区域的位图存放在DC中。但是无论如何怎么截取始终都没有办法将其正确截获,接下来的位图总是出错。

DrawBmp(constCString strBmpPath, const CRect rect, const BOOL bBK,CDC *pDC)

         其中的pDC用以存放截获的位图的DC.后来经过高手调试,最终发现我的问题出现在了位图上面。

CreateCompatibleBitmapE6K(&m_tempBitMap,

                     &dc, m_rect.Width(),m_rect.Height());

              CreateCompatibleBitmapE6K(&m_copyBitMap,

                     &dc, m_rect.Width(),m_rect.Height());

              CreateCompatibleDCE6K(&m_dcMem,&dc);   

              CreateCompatibleDCE6K(&m_selMemdc,&dc);

              CreateCompatibleDCE6K(&m_tempdc,&dc);

              m_pOldBitmap= m_selMemdc.SelectObject(&m_tempBitMap);

              m_pCopyBitmap=m_tempdc.SelectObject(&m_tempBitMap);

 

         其中问题就出现在红色的部分,原来,我将两块DC都选中了同一个位图,而忘记了Cbitmap只要被选中一次之后,是不能够再次被选中的。因为一旦位图被选中,就被锁定了。因此我的m_tempDC始终无法获取到那个位图,所以进行截屏下来的总是错误的!

         查看MSDN上的关于位图的解释,函数SelectObject如果失败的话,返回的是一个NULL,因此可以知道,是我的当前的DC无法获取到!

         因此,问题处在Cbitmap只能够被选中一次,不能够被两个DC都选中,否则就会报错!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值