我试图在MFC对话框的顶部创建一个透明的CWnd,以便我可以将位图bitblt到对话框dc,然后分别将形状绘制到直接位于对话框顶部的透明DC。问题是,我似乎无法让CWnd变得透明。相反,每当我将一个黑色位图blit到透明CWnd时,它就会在对话框中闪烁......好像有人要将对话框直接点亮,然后立即将黑色位图blit到同一个DC。
例如,在对话框中,我创建了一个CWnd对象,它将是透明叠加层:
pDrawingWnd = new CWnd();
pDrawingWnd->Create(NULL, L"", WS_VISIBLE, CRect(0, 0, IMAGEX, IMAGEY), this, 0);
pDrawingWnd->ModifyStyleEx(0, WS_EX_LAYERED | WS_EX_TRANSPARENT);
pDrawingWnd->SetLayeredWindowAttributes(RGB(0,0,0), 0, LWA_COLORKEY);
然后,在计时器循环中,我将一个矩形绘制到CWnd DC:
CDC mDC;
pDC = pDrawingWnd->GetDC();
mDC.CreateCompatibleDC(pDC);
if (drawingBmp)
delete drawingBmp;
drawingBmp = new CBitmap();
drawingBmp->CreateCompatibleBitmap(pDC, IMAGEX, IMAGEY);
CBitmap* pOldBmp2 = mDC.SelectObject(drawingBmp);
mDC.FrameRect(CRect(0,0,100,100), &brush);
pDC->BitBlt(0, 0, IMAGEX, IMAGEY, &mDC, 0, 0, SRCCOPY);
mDC.SelectObject(pOldBmp2);
ReleaseDC(pDC);
因此,不是在对话框顶部绘制绿色矩形,而是闪烁显示带有绿色矩形的黑色位图。通常我会将矩形直接绘制到对话框dc,但是当我的更新速度较慢时,让我们说每秒10次......它会慢慢更新矩形的大小。所以我宁愿矩形的绘制与对话框上的blit率无关。什么是在另一个DC上绘制的正确方法?
感谢您的帮助!