从昨天开始就一直在调试绘图问题,当时有一个截屏函数是用来截获当前屏幕制定区域的位图存放在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都选中,否则就会报错!