Рисование по окну с двойной буферизацией — все еще мерцание

Я пытаюсь отследить позицию объекта с помощью GDI в C ++ и нарисовать эту позицию поверх отображения приложения, создав прямоугольник. Объект немного изменяет положение довольно часто, и пока объект стоит на месте или перемещает прямоугольник, который я рисую, мигает.

Инициализация:

TargetWnd = FindWindow(nullptr, "app name");
frontbuffer_HDC = GetDC(TargetWnd);
backbuffer_HDC = CreateCompatibleDC(frontbuffer_HDC);
frontbuffer_bitmap = CreateCompatibleBitmap(frontbuffer_HDC, 1920, 1080);
SelectObject(backbuffer_HDC, frontbuffer_bitmap);
Brush = CreateSolidBrush(RGB(255, 0, 0));

Эта функция вызывается в цикле 5 мс:

DrawBorderBox(coords[0], coords[1], x, y, 1);

void DrawBorderBox(int x, int y, int w, int h, int thickness)
{

DrawFilledRect(x, y, w, thickness);
BitBlt(frontbuffer_HDC, x, y, w, thickness, backbuffer_HDC, x, y, SRCCOPY);

DrawFilledRect(x, y, thickness, h);
BitBlt(frontbuffer_HDC, x, y, thickness, h, backbuffer_HDC, x, y, SRCCOPY);

DrawFilledRect((x + w), y, thickness, h);
BitBlt(frontbuffer_HDC, x+w, y, thickness, h, backbuffer_HDC, x, y, SRCCOPY);

DrawFilledRect(x, y + h, w + thickness, thickness);
BitBlt(frontbuffer_HDC, x, y+h, w+thickness, thickness, backbuffer_HDC, x, y, SRCCOPY);

}

void DrawFilledRect(int x, int y, int w, int h)
{
RECT rect = { x, y, x + w, y + h };
FillRect(backbuffer_HDC, &rect, Brush);
}

Есть идеи, что происходит? Прямоугольник правильно скопирован из заднего буфера в передний буфер, но мерцание все еще присутствует.

Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector