Принудительно перерисовывать экран после рисования на экране DC C ++

StackOverflow https://stackoverflow.com/questions/621255

Вопрос

Я создаю пользовательский SIP для Windows Mobile и, когда пользователь нажимает или " зависает " поверх кнопки на клавиатуре я рисую его соответствующее выбранное изображение (iPhone-esque) для DC экрана, используя :: GetDC (NULL). Разработано в Win32 C ++.

Моя проблема в том, что я не могу заставить экран перекрашиваться, стирая ранее нарисованный ключ. Я перепробовал все, что мог придумать, чтобы заставить его, :: RedrawWindow () со всеми различными комбинациями параметров, используя NULL или любую из функций Get..Window в качестве HWND, и все комбинированные флаги (INVALIDATE | UPDATENOW | ERASENOW | ALLCHILDREN и т. Д.). Я также попытался сделать недействительным прямоугольник и принудительно перекрасить основное приложение, используя :: GetActiveWindow и :: GetForegroundWindow, варианты, используя :: GetDesktopWindow и т. Д. У меня практически закончились идеи, и это последнее, что меня удерживает от используя его на моем устройстве Windows Mobile. У кого-нибудь есть какие-либо идеи? Любая помощь будет принята с благодарностью.

Я включил несколько скриншотов, чтобы проиллюстрировать мою дилемму.

до снимка экрана
после снимка экрана

До http://img13.imageshack.us/img13/9861/cezoom1. png После http://img3.imageshack.us/img3/7481/ cezoom2.png

Заранее спасибо!

Это было полезно?

Решение

Вместо того, чтобы рисовать в фоновом режиме, почему бы вам не создать временное окно и не рисовать в нем? Когда вы разрушаете окно, фон должен автоматически перекрашиваться.

Я просто догадываюсь, потому что я не знаю Windows Mobile, но может случиться так, что Windows кэширует последнюю вещь, которая была нарисована в DC, и перерисовывает ее каждый раз, когда вы аннулируете окно.

Другие советы

Вы пробовали InvalidateRect на экране?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top