А это что за код?
Понятно, что что-то отрисовывается средствами винды.
На самом деле проблеммная строка здесь:
Код:
Perform(WM_ERASEBKGND, MemDC, MemDC);
Ты стираешь фон, а потом делаешь отрисовку заного. Вот тут и происходит мерцание. На самом деле в большинстве случаев такая сложная отрисовка просто не нужна. Ты сначала отрисуй все на буферном битмапе, а потом просто выведи этот битмап в нужном месте - БЕЗ СТИРАНИЯ ФОНА!!!. Правда, это прокатит если у тебя нет прозрачных областей.
Собственно, такой фокус я делал в своей смотрелке графики на основе TPaintBox. В памяти просто создается битмап нужного размера, заливается нужным цветом фона, на нем отрисовывается картинка, а потом этот битмап ЦЕЛИКОМ выводится методом копирования на контрол. Никакого мерцания. При этом даже не используются напрямую методы API и 8 мегапиксельная картинка выводится мгновенно. Правдя масштабирование используется примитивное, без фильтров.