2009-03-07 9 views
0

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

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

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

Before Screenshot
After Screenshot

Before http://img13.imageshack.us/img13/9861/cezoom1.pngAfter http://img3.imageshack.us/img3/7481/cezoom2.png

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

ответ

1

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

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

+0

Это интересный подход, я дам ему благодарность. Я не верю, что DC кэшируется, потому что проблема возникает только тогда, когда кнопки вытягиваются за пределы моей панели sip (над ней). У меня нет этой проблемы с кнопками внутри панели, даже если они также тянутся к экрану. – 2009-03-07 19:41:16

+0

Когда я говорю кнопками внутри панели, я имею в виду синие выбранные всплывающие кнопки. (все остальные кнопки нарисованы на растровое изображение, а затем blt на DC-панели моего sip-панели, а не на экране) – 2009-03-07 19:43:24

1

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

+0

на экране hWnd Я предполагаю, что вы имеете в виду :: GetDesktopWindow(), правильно? Если это то, что вы имеете в виду, тогда да, я пробовал все обычные вызовы против экрана wnd. – 2009-03-07 19:37:16