WINAPI вопрос (о мерцании) - PullRequest
       3

WINAPI вопрос (о мерцании)

0 голосов
/ 23 февраля 2010

Я рисую изображение в формате JPEG с помощью IPicture. Сначала я загружаю его, затем, если выполняются некоторые условия, я рисую его в WM_Paint, используя функцию IPicture :: Render. Проблема в том, что он не рисует изображение, если окно закрыто другим окном, и когда я удаляю закрывающее окно, только это изображение показывает, где окно закрывало его. Я использовал двойную буферизацию, но та же проблема, и Я знаю, что я должен использовать InvalidateRect, но я не могу понять, где его использовать? Есть ли какое-то специальное событие, как - вы должны обновить свое окно? Мне нужно место, где я могу использовать функцию InvalidateRect. Вы можете мне помочь? Теперь я попытался использовать его в CALLBACK WndProc в случае переключения по умолчанию. Я только что проверил это (используя двойную буферизацию), и изображение рисуется сразу же, даже если есть другое окно, частично закрывающее его, но я каждый раз мерцаю, если меняю размер, перемещаю окно или перемещаю другое окно.

1 Ответ

0 голосов
/ 24 февраля 2010

Вопрос не очень хорошо объясняет ситуацию. Тем не менее:

Q: Сначала я загружаю его, затем, если выполняются некоторые условия, я рисую его в WM_PAINT с использованием функции IPicture::Render.

A: Всегда рисовать картинку в WM_PAINT. WM_PAINT отправляется всякий раз, когда содержимое окна повреждено (из-за изменения размера окна или его открытия другими окнами), поэтому вы ДОЛЖНЫ рисовать во время WM_PAINT, иначе вы получите неокрашенные области.

Q: Я знаю, что должен использовать InvalidateRect, но я не могу понять, где его использовать? Есть ли какое-то специальное мероприятие, подобное

A: Windows автоматически вызывает InvalidateRect каждый раз, когда Windows повреждает содержимое вашего окна (например, когда вы открываете окно, восстанавливаете окно или изменяете размер окна). Это гарантирует, что сообщение WM_PAINT будет отправлено в ваше окно. Вам нужно вызывать InvalidateRect () всякий раз, когда вы изменяете содержимое вашего окна - например, когда вы заканчиваете загрузку нового изображения, вы вызываете InvalidateRect, чтобы получить окна для отправки вам `WM_PAINT, и новое изображение будет окрашены тогда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...