Какие плохие вещи могут случиться, если мы выйдем из программы без вызова ReleaseDC?
Выход из программы автоматически освобождает все выделенные ресурсы, поэтому я согласен с ДэвидомКомментарии Хеффернана и Ханса Пассанта: ничего плохого не произойдет.
Выход из рутины, в которой вы использовали GetDC
, - другая история.Как уже указывал Армен Цирунян , ReleaseDC
должен вызываться после получения контекста устройства общего и оконного контроллеров домена, в противном случае программа может работать в исключительной ситуации out of из-зарост специального кэша системы для этих контроллеров домена.
Теперь, будет ли удобно узнать, является ли окно, из которого вы получаете контроллер домена, общим или оконным контроллером домена.Один из способов получить эту информацию - посмотреть, имеет ли окно контекст частного устройства.См. Документацию о Контексты устройства отображения :
Контексты частных устройств
... Контексты частных устройств не являются частью системного кэша и, следовательно, не должны бытьвыпущен после использования.... Приложение создает частный контекст устройства, сначала указав стиль класса окна CS_OWNDC, когда оно инициализирует элемент стиля структуры WNDCLASS и вызывает RegisterClass ...
Таким образом, когда окноВ классе установлен флаг CS_OWNDC
, вам не нужно беспокоиться об освобождении DC, поскольку он управляется самим окном, а не системным кешем.Вы можете получить эту настройку, вызвав GetClassInfo (Ex) .
Но учтите, что освобождение DC, полученного с помощью GetDC
, не влияет на класс или частные контроллеры домена, поэтому оно всегда разумно звонить ReleaseDC
после GetDC
.