void CView::OnPaint()
{
CPaintDC dc(this);
dc.Rectangle(0,0,1000,1000); CDC dcCache;
CDC dcDest;
CBitmap bitmapChche;
CBitmap bitmapDesc; dcCache.CreateCompatibleDC(NULL);
dcDest.CreateCompatibleDC(NULL); bitmapChche.CreateCompatibleBitmap(&dcCache,500, 500);
bitmapDesc.CreateCompatibleBitmap(&dcDest,500, 500);
dcCache.SelectObject(bitmapChche);
dcDest.SelectObject(bitmapDesc); CRect rect(0,0,500,500);
dcCache.Rectangle(0,0,500,500);
dcDest.Rectangle(rect);
dcDest.Ellipse(rect);
dcDest.DrawText("123456",&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);// 情况1:正常
// 将dcDest 直接“透”到目标dc上
// ::TransparentBlt(dc.m_hDC,0,0,500,500,dcDest.m_hDC,0,0,500,500,RGB(255,255,255));// 情况2:不正常,画面奇怪的翻转,不好形容,最好试一下。
// 将dcDest 先“透”到dcCache上,再bitblt到目标dc上
::TransparentBlt(dcCache.m_hDC,0,0,500,500,dcDest.m_hDC,0,0,500,500,RGB(255,255,255));
dc.BitBlt(0,0,500,500,&dcCache,0,0,SRCCOPY); return;
}
{
CPaintDC dc(this);
dc.Rectangle(0,0,1000,1000); CDC dcCache;
CDC dcDest;
CBitmap bitmapChche;
CBitmap bitmapDesc; dcCache.CreateCompatibleDC(NULL);
dcDest.CreateCompatibleDC(NULL); bitmapChche.CreateCompatibleBitmap(&dcCache,500, 500);
bitmapDesc.CreateCompatibleBitmap(&dcDest,500, 500);
dcCache.SelectObject(bitmapChche);
dcDest.SelectObject(bitmapDesc); CRect rect(0,0,500,500);
dcCache.Rectangle(0,0,500,500);
dcDest.Rectangle(rect);
dcDest.Ellipse(rect);
dcDest.DrawText("123456",&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);// 情况1:正常
// 将dcDest 直接“透”到目标dc上
// ::TransparentBlt(dc.m_hDC,0,0,500,500,dcDest.m_hDC,0,0,500,500,RGB(255,255,255));// 情况2:不正常,画面奇怪的翻转,不好形容,最好试一下。
// 将dcDest 先“透”到dcCache上,再bitblt到目标dc上
::TransparentBlt(dcCache.m_hDC,0,0,500,500,dcDest.m_hDC,0,0,500,500,RGB(255,255,255));
dc.BitBlt(0,0,500,500,&dcCache,0,0,SRCCOPY); return;
}
bitmapDesc.CreateCompatibleBitmap(&dc,500, 500);