BITMAP m_bm; COLORREF cColor; // ¨±DC HDC hMem, hBack, hObject, hTemp, hSave; hBack = CreateCompatibleDC(hdc); hObject = CreateCompatibleDC(hdc); hMem = CreateCompatibleDC(hdc); hSave = CreateCompatibleDC(hdc); hTemp = CreateCompatibleDC(hdc); // SelectObject(hTemp, hBitmap); GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&m_bm); //í POINT ptSize; // í ptSize.x = m_bm.bmWidth; // ptSize.y = m_bm.bmHeight; // × DPtoLP(hTemp, &ptSize, 1); // ¨± HBITMAP bmBack, bmObject, bmMem, bmSave; // bmBack = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); bmObject = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); // è± bmMem = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); bmSave = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); // ¨±±DC HBITMAP OldbmBack, OldbmObject, OldbmMem, OldbmSave; OldbmBack = (HBITMAP)SelectObject(hBack, bmBack); OldbmObject = (HBITMAP)SelectObject(hObject, bmObject); OldbmMem = (HBITMAP)SelectObject(hMem, bmMem); OldbmSave = (HBITMAP)SelectObject(hSave, bmSave); // è SetMapMode(hTemp, GetMapMode(hdc)); // ± BitBlt(hSave, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCCOPY); // ±°èè÷ cColor = SetBkColor(hTemp, cTransparentColor); // ¨±ê± BitBlt(hObject, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCCOPY); // DC±° SetBkColor(hTemp, cColor); // ¨·×±ê± BitBlt(hBack, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, NOTSRCCOPY); // ±÷DC±°±êDC BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hdc, xStart, yStart, SRCCOPY); // ± BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, SRCAND); // ±÷ BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y, hBack, 0, 0, SRCAND); // ±êDC±°×óìò×÷ BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCPAINT); // ±±ê StretchBlt(hdc, xStart, yStart, ptSize.x+xadd, ptSize.y+yadd, hMem, 0, 0, ptSize.x, ptSize.y,SRCCOPY); // BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y, hSave, 0, 0, SRCCOPY); // ± DeleteObject(SelectObject(hBack, OldbmBack)); DeleteObject(SelectObject(hObject, OldbmObject)); DeleteObject(SelectObject(hMem, OldbmMem)); DeleteObject(SelectObject(hSave, OldbmSave)); // ±DC DeleteDC(hMem); DeleteDC(hBack); DeleteDC(hObject); DeleteDC(hSave); DeleteDC(hTemp); |
|