一个本科生问我的问题:想保存内存位图,并具有去除部分透明色。void CBitmapView::OnDraw(CDC* pDC) { CBitmapDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CRect rect; GetClientRect(&rect); pDC ->TransparentBlt (0, 0, rect.Width(), rect.Height(), &m_dcCompatible, 0, 0, rect.Width(), rect.Height(),RGB(0,0,0)); } void CBitmapView::OnReadBitmap() { CClientDC dc(this); CBrush *brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); if (!m_dcCompatible.m_hDC) { m_dcCompatible.CreateCompatibleDC (&dc); CRect recClient; GetClientRect(&recClient); CBitmap bmCompatible; bmCompatible.CreateCompatibleBitmap (&dc, recClient.Width(), recClient.Height()); m_dcCompatible.SelectObject (&bmCompatible); m_dcCompatible.BitBlt (0, 0, recClient.Width(), recClient.Height(), &dc, 0, 0, SRCCOPY); m_dcCompatible.SelectObject(brush); m_dcCompatible.FillRect (recClient, &CBrush(RGB(0,0,0))); CPen pen(PS_SOLID, 2, RGB(255,0,0)); m_dcCompatible.SelectObject(&pen); m_dcCompatible.MoveTo (100,100); m_dcCompatible.LineTo (recClient.Width(), recClient.Height()); Invalidate(); } }