Почему CreateDIBSection () терпит неудачу, когда окно находится вне экрана? - PullRequest
1 голос
/ 25 марта 2009

Я создаю компонент Delphi для встраивания поверхности рендеринга SDL в форму VCL. Он работает просто отлично, пока форма отображается на экране в момент создания поверхности SDL. В противном случае он не сможет создавать текстуры рендеринга.

Я проследил в код SDL и в результате вызвал следующий вызов функции, который завершился ошибкой (возвращает NULL):

data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);

HDC является допустимым дескриптором контекста рисования, принадлежащего элементу управления, который имеет свой собственный дескриптор окна HWND, который был правильно настроен. Но когда элемент управления создается вне экрана, что обычно происходит в Delphi (все формы с их элементами управления создаются в скрытом состоянии до тех пор, пока не пришло время их отображать), вызов CreateDIBSection завершится ошибкой, пока элемент управления не станет фактически видимым. *

Кроме того, если он создан на экране, то скрытый и повторно показанный (например, если он находится на листе вкладок и я переключаю вкладки), любые текстуры, которые я создаю, в процессе этого блокируются.

Это сводит меня с ума. Кто-нибудь знает, что происходит и как я могу обойти это?

Ответы [ 2 ]

0 голосов
/ 05 июля 2016

Контекст рисования действителен только во время обработки краски.

0 голосов
/ 26 марта 2009

Просто идея .... Вы смотрели ручку окна? Разве это не убито и не воссоздано?

...