HDC deskDC = ::GetDC(NULL); HDC srcDC = ::CreateCompatibleDC(deskDC);
HDC xorDC = ::CreateCompatibleDC(deskDC);
HBITMAP hSrcOldBmp = (HBITMAP)::SelectObject(srcDC,hBitmap);
HBITMAP hXorOldBmp = (HBITMAP)::SelectObject(xorDC,m_hBitmap); ::BitBlt(srcDC,0,0,m_cxClient,m_cyClient,xorDC,0,0,SRCINVERT);
hBitmap = (HBITMAP)::SelectObject(srcDC,hSrcOldBmp); ::DeleteObject(hSrcOldBmp);
::DeleteObject(hXorOldBmp);
::DeleteDC(srcDC);
::DeleteDC(xorDC); ::ReleaseDC(NULL,deskDC);那么最后得到的hBitmap为什么不对???
HDC xorDC = ::CreateCompatibleDC(deskDC);
HBITMAP hSrcOldBmp = (HBITMAP)::SelectObject(srcDC,hBitmap);
HBITMAP hXorOldBmp = (HBITMAP)::SelectObject(xorDC,m_hBitmap); ::BitBlt(srcDC,0,0,m_cxClient,m_cyClient,xorDC,0,0,SRCINVERT);
hBitmap = (HBITMAP)::SelectObject(srcDC,hSrcOldBmp); ::DeleteObject(hSrcOldBmp);
::DeleteObject(hXorOldBmp);
::DeleteDC(srcDC);
::DeleteDC(xorDC); ::ReleaseDC(NULL,deskDC);那么最后得到的hBitmap为什么不对???
最后一个参数改成PATINVERT看看~~
异或两次就会变回原图~~
PATINVERT 用XOR操作符使指定模式的颜色与目标矩形颜色结合
SRCINVERT 用XOR操作结合源矩形、目标矩形颜色
::BitBlt(srcDC,0,0,m_cxClient,m_cyClient,xorDC,0,0,SRCINVERT);//怎么个不对法?
hBitmap = (HBITMAP)::SelectObject(srcDC,hSrcOldBmp);//这是不是跟没玩一样啊