Почему мой вызов D2D1 :: RenderTarget :: DrawText () приводит к многократной отправке WM_PAINT?

У меня есть небольшая библиотека 2D-рендеринга на C ++, которая работает в приложениях Win32 и использует Direct2D для рисования. Я вызвал BeginDraw (), сделал загрузку рисования и затем вызвал DrawText (). Это, конечно, до EndDraw ().

Вместо возврата, чтобы я мог продолжать вызывать функции рендеринга, он останавливается, потому что отправил WM_PAINT (предположительно, без ожидания). (И продолжит отправлять сообщение, пока, возможно, окно не будет проверено? Я не знаю)

Я попытался перехватить вызов и проверить, рисую ли я в то время, и в этом случае притвориться, что я правильно обработал сообщение (но без фактической проверки какого-либо клиентского региона вручную), но оно просто продолжает его отправлять, и DrawText () не возвращается

Это нормальное поведение и что с этим делать?

(Я также использую Visual Studio Community 2013).

1

Решение

Я нашел ошибку в конце концов.

Одним из параметров, которые я передал в функцию DIrect2D, был недопустимый указатель объекта, так как я не знал, что уже освободил память, а затем пытался использовать объект для рисования. Если бы я знал, что шаблон памяти по умолчанию для выпущенных указателей Direct2D был 0xcdcdcdcd (или что-то в этом роде), я бы увидел его раньше.

По какой-то причине, незаметно для человека, это вызвало WM_PAINT … ужасную ошибку.

Спасибо всем!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]