예제 #1
0
bool CRGBBitmapShow::PaintDIB(HDC hDC,LPRECT lpDCRect,LPRECT lpDIBRect,COLORREF TransparentColor)
{
    CDC*pDC=CDC::FromHandle(hDC);
	CDC memDC,tempDC;
	HBITMAP m_bitmap =CreateCompatibleBitmap(hDC,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect)); //创建位图内存 
	memDC.CreateCompatibleDC(pDC);
	HBITMAP pOldBitmap=(HBITMAP)SelectObject(memDC, m_bitmap); 
	CRect memrt(0,0,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect));
	if(!PaintDIB(memDC.m_hDC,memrt,lpDIBRect))
	{
		memDC.SelectObject(pOldBitmap);
		DeleteObject(m_bitmap); 
 	    memDC.DeleteDC();
		return false;
	}
	tempDC.CreateCompatibleDC(pDC);
	HBITMAP maskBMP =CreateBitmap(RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),1,1,NULL); //创建单色掩码位图 
    HBITMAP oldmaskBMP=(HBITMAP)SelectObject(tempDC, maskBMP);
	SetBkColor(memDC.m_hDC, TransparentColor);// 设置透明色 
	BitBlt(tempDC.m_hDC,0,0,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),memDC.m_hDC,0,0,SRCCOPY);
	SetBkColor(memDC.m_hDC, RGB(0,0,0)); 
	SetTextColor(memDC.m_hDC, RGB(255,255,255)); // 白色 
    BitBlt(memDC.m_hDC,0,0,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),tempDC.m_hDC,0,0,SRCAND); 
    SetBkColor(hDC,RGB(255,255,255)); // 透明部分保持屏幕不变,其它部分变成黑色 
	SetTextColor(hDC,RGB(0,0,0)); // 黑色 
	BitBlt(hDC,lpDCRect->left, lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),tempDC.m_hDC,0,0,SRCAND); //"与"运算,在hdc0生成掩模
    BitBlt(hDC,lpDCRect->left, lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),memDC.m_hDC,0,0,SRCPAINT);
	memDC.SelectObject(pOldBitmap);
	tempDC.SelectObject(oldmaskBMP);
	DeleteObject(m_bitmap); 
    DeleteObject(maskBMP); 
 	memDC.DeleteDC();
	tempDC.DeleteDC();
	return true;
}
예제 #2
0
void SPicBox::OnPaint()
{
	if(!m_pDibBits)
	{
		CStatic::OnPaint();
		return;
	}

	CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	// Do not call CStatic::OnPaint() for painting messages
	PaintDIB(&dc);
}
예제 #3
0
bool CRGBBitmapShow::PaintDIB(HDC hDC,LPRECT lpDCRect,LPRECT lpDIBRect)
{
    CDC*pDC=CDC::FromHandle(hDC);
    CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	HBITMAP m_bitmap =CreateCompatibleBitmap(hDC,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect)); //创建位图内存 
    HBITMAP pOldBitmap=(HBITMAP)SelectObject(memDC, m_bitmap); 
    CRect memrt(0,0,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect));
    if(!PaintDIB(memDC.m_hDC,memrt,lpDIBRect,0))
	{
		memDC.SelectObject(pOldBitmap);
		DeleteObject(m_bitmap); 
 	    memDC.DeleteDC();
		return false;
	}
    BitBlt(hDC,lpDCRect->left, lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),memDC.m_hDC,0,0,SRCCOPY);
	if(!PaintDIB(memDC.m_hDC,memrt,lpDIBRect,1))
	{
		memDC.SelectObject(pOldBitmap);
		DeleteObject(m_bitmap); 
 	    memDC.DeleteDC();
		return false;
	}
    BitBlt(hDC,lpDCRect->left, lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),memDC.m_hDC,0,0,SRCPAINT);
	if(!PaintDIB(memDC.m_hDC,memrt,lpDIBRect,2))
	{
		memDC.SelectObject(pOldBitmap);
		DeleteObject(m_bitmap); 
 	    memDC.DeleteDC();
		return false;
	}
    BitBlt(hDC,lpDCRect->left, lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),memDC.m_hDC,0,0,SRCPAINT);
	memDC.SelectObject(pOldBitmap);
	DeleteObject(m_bitmap); 
 	memDC.DeleteDC();
	return true;
}
예제 #4
0
void SPicBox::PaintDIB(void)
{
	CDC *pDC = GetDC();
	PaintDIB(pDC);
	ReleaseDC(pDC);
}