У меня есть небольшая библиотека 2D-рендеринга на C ++, которая работает в приложениях Win32 и использует Direct2D для рисования. Я вызвал BeginDraw (), сделал загрузку рисования и затем вызвал DrawText (). Это, конечно, до EndDraw ().
Вместо возврата, чтобы я мог продолжать вызывать функции рендеринга, он останавливается, потому что отправил WM_PAINT (предположительно, без ожидания). (И продолжит отправлять сообщение, пока, возможно, окно не будет проверено? Я не знаю)
Я попытался перехватить вызов и проверить, рисую ли я в то время, и в этом случае притвориться, что я правильно обработал сообщение (но без фактической проверки какого-либо клиентского региона вручную), но оно просто продолжает его отправлять, и DrawText () не возвращается
Это нормальное поведение и что с этим делать?
(Я также использую Visual Studio Community 2013).
Я нашел ошибку в конце концов.
Одним из параметров, которые я передал в функцию DIrect2D, был недопустимый указатель объекта, так как я не знал, что уже освободил память, а затем пытался использовать объект для рисования. Если бы я знал, что шаблон памяти по умолчанию для выпущенных указателей Direct2D был 0xcdcdcdcd (или что-то в этом роде), я бы увидел его раньше.
По какой-то причине, незаметно для человека, это вызвало WM_PAINT … ужасную ошибку.
Спасибо всем!
Других решений пока нет …