Win32: Почему ReleaseDC () говорит, что мой DC не найден? - PullRequest
1 голос
/ 16 октября 2010

Я вызываю getDC (hwnd), а затем при закрытии вызываю ReleaseDC (hwnd, dc). Это для механизма OpenGL и после того, как я вызову WGLMakeCurrent (Null, Null) и WGLDeleteContext.

ReleaseDC возвращает код ошибки 1425, который равен 1425L ERROR_DC_NOT_FOUND Неверный HDC передан ReleaseDC.

Я не понимаю, как HDC мог быть недействительным после того, как ранее получил его от того же HWND.

Я проверил его указатель, когда получил его, и он остался прежним (не то, что это помогает проверить такую ​​вещь), но у меня заканчиваются идеи.

Ответы [ 3 ]

2 голосов
/ 16 октября 2010

Множество примеров OpenGl довольно (на мой взгляд) связывают вещи с контекстами устройства.Если вы используете окно со стилем, подобным CS_OWNDC, или кэшируете HDC на весь срок службы приложения, возможно, вы перезагружали HDC или пытаетесь освободить его после того, как окно было уничтожено.

Я не видел ни одной статьи, утверждающей, что кэширование HDC (или использование таких стилей, как CS_OWNDC) важно или вообще способствует повышению производительности приложения OpenGL.Кроме того, рисование на любом DC за пределами BeginPaint / EndPaint усложняет жизнь для оконного менеджера рабочего стола NT 6.1, поэтому вне начальной настройки я предпочитаю просто использовать сообщение WM_PAINT для рендеринга сцены OpenGL, переключаясь в соответствующем контекстечерез WGLMakeCurrent ().Это делает отслеживание HDC намного более управляемым (то есть вам на самом деле это не нужно), и ваше приложение внезапно может работать с несколькими окнами OpenGL одновременно.

0 голосов
/ 16 октября 2010

Вы уверены, что правильно вызываете ReleaseDC? Согласно MSDN это должен быть ReleaseDC (hwnd, dc);

0 голосов
/ 16 октября 2010

Передаете ли вы правильный hwnd в качестве первого параметра в ReleaseDC?Кроме того, вашему классу окна может потребоваться установка стиля класса CS_OWNDC.

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