怎么复制一个位图句柄?
- C/C++ code
HBITMAP hOldBmp=(HBITMAP)::SelectObject(m_hMemDC,m_hBrightBmp); HDC hmMemDC=CreateCompatibleDC(m_hMemDC); //把没有处理过的位图的一部分贴到mmemDC上 HBITMAP hOldMemBmp=(HBITMAP)::SelectObject(hmMemDC,m_hScreenBmp); rc=m_rcTrack.m_rect;creen int nWidth=rc.right-rc.left; int nHeight=rc.bottom-rc.top; //复制mmemDC到memDC上 ::BitBlt(m_hMemDC,rc.left,rc.top,nWidth,nHeight,hmMemDC,rc.left,rc.top,SRCCOPY);
m_hScreenBmp是需要一直不存而且不能改变的位图句柄
但是上面那样做了之后,这个句柄指向的图会改变
有没有办法复制一下这个句柄啊?
谢谢啦
[解决办法]
HBITMAP a = b
b是原来的句柄
我没试过 感觉应该可以
[解决办法]
- C/C++ code
HBITMAP CMyFormats::CopyHBitmap(HBITMAP hSourceHbitmap){ CDC sourceDC; CDC destDC; sourceDC.CreateCompatibleDC(NULL); destDC.CreateCompatibleDC(NULL); //The bitmap information. BITMAP bm = {0}; //Get the bitmap information. ::GetObject(hSourceHbitmap, sizeof(bm), &bm); // Create a bitmap to hold the result HBITMAP hbmResult = ::CreateCompatibleBitmap(CClientDC(NULL), bm.bmWidth, bm.bmHeight); HBITMAP hbmOldSource = (HBITMAP)::SelectObject(sourceDC.m_hDC, hSourceHbitmap); HBITMAP hbmOldDest = (HBITMAP)::SelectObject(destDC.m_hDC, hbmResult); destDC.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &sourceDC, 0, 0, SRCCOPY ); // Restore DCs ::SelectObject(sourceDC.m_hDC, hbmOldSource); ::SelectObject(destDC.m_hDC, hbmOldDest); ::DeleteObject(sourceDC.m_hDC); ::DeleteObject(destDC.m_hDC); return hbmResult;}
[解决办法]
直接用API命令CopyImage不就可以了吗?你们怎么越搞越复杂了....
[解决办法]
句柄无所谓复制不复制的,关键是你要复制出来一张位图。