Я пытаюсь создать прозрачный CWnd поверх диалога MFC, чтобы я мог бить битовые растровые изображения в диалоговом окне dc, а затем отдельно рисовать фигуры в прозрачный DC, который находится непосредственно над диалогом. Проблема в том, что я не могу заставить CWnd быть прозрачной. Вместо этого, всякий раз, когда я разбиваю черное растровое изображение на прозрачный CWnd, он мерцает с диалоговым окном... как если бы кто-то должен был blit диалог dc, а затем сразу же после того, как 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?
Спасибо за любую помощь!
Вам необходимо создать многоуровневое окно с альфа-пикселем.