Здравствуйте, Dervish, Вы писали:
D>Здравствуйте, Phoenickx, Вы писали:
P>>при таком коде второй прямоугольник пропадает на время движения в первом,а затем обновляется.
P>>Нужно чтобы не пропадал второй прямоугольник,кто-нибудь может помочь?
D>А вы думаете, что InvalidateRect перерисовывает окно? Ничего подобного! InvalidateRect просто помечает область окна как невалидную (требующую перерисовки) и тут же возвращается. И только тогда, когда ваша программа закончит текущую работу (чуть сложнее, конечно же, но я сознательно упростил), только тогда, если есть невалидные области у окна, Windows генерирует сообщение WM_PAINT.
D>А дальше происходит вот что:
D>Когда вы обрабатываете сообщение WM_PAINT, в вашем окне оба прямоугольника уже помечены как невалидные. А когда вы вызываете BeginPaint, автоматически генерируется сообщение WM_ERASEBKGND, при обработке которого успешно затираются оба прямоугольника.
D>Как решить проблему? Есть несколько вариантов:
D>
D>Самое простое — поставить после InvalidColumns вызов UpdateWindow.
D>Не использовать InvalidateRect для первого прямоугольника, а просто получать контекст окна через GetDC и рисовать в нём.
D>Создать ещё два окна. В первом разместить вашу анимацию, во втором — второй прямоугольник.
D>
Спасибо!мысль понял,но самое простое не работает: UpdateWindow вызывает зависание программы
Идея с двумя окнами мне понравилась,надо попробывать