У меня есть небольшая библиотека 2D-рендеринга на C++, которая работает в приложениях Win32 и использует Direct2D для рисования. Я вызвал BeginDraw(), выполнил загрузку чертежа, а затем вызвал DrawText(). Это, конечно же, перед EndDraw().Почему мой вызов D2D1 :: RenderTarget :: DrawText() приводит к повторному отправке WM_PAINT?
Вместо того чтобы возвращаться, чтобы я мог выполнять вызовы функций рендеринга, он останавливается, потому что он отправил WM_PAINT (предположительно, не дожидаясь). (И будет продолжать отправлять сообщение, пока, возможно, окно не будет проверено? t know)
Я попытался поймать вызов и проверить, если я рисую в то время, и в этом случае притвориться, что я обработал сообщение правильно (но без фактической проверки какого-либо региона клиента вручную), но он просто сохраняет отправка его, а DrawText() не возвращается.
Это нормальное поведение и что с этим делать?
(Я использую Visual Studio 2013 сообщества, а также.)
'WM_PAINT' будет продолжаться, пока вы не нарисуете или не проверите свое окно. Если вам все равно (потому что вы не используете GDI), тогда просто вызывайте «BeginPaint», а затем «EndPaint». –
Спасибо Раймонду. Я не понимаю, почему он отправляет один из DrawText ID2D1 :: RenderTarget в любом случае, когда он не делает этого при использовании таких функций, как DrawLine или DrawRect. Есть идеи? –
То, что вы описываете, звучит странно для меня. У меня есть тестовое приложение самостоятельно, где я выполняю DrawTextLayout() в обработчике WM_PAINT, после EndDraw() я просто проверяю ValidateRect (hwnd, NULL), и он работает нормально. Не могли бы вы показать часть своего кода? Предположительно, это HwndRenderTarget, не так ли? Какая версия Windows? – bunglehead