![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Храним HDC окна. Плохо?
@!!ex © (2009-02-16 16:49:00)В документации говорится, что надо получать HDC с помощью GetDC и после использования сразу освобождать с помощью ReleaseDC.
Так работает OnPaint. Там получается DC в начале события и релизится вконце.
Почеме нельзя получать HDC при создании окна и освобождать по окончанию работы?
Eraser (2009-02-16 17:42:00) [1]> [0] @!!ex © (16.02.09 16:49)
где именно в документации это говорится?
вообще то никаких GetDC напрямую не вызывается, по крайней мере в VCL. вызывается BeginPaint.
> Почеме нельзя получать HDC при создании окна и освобождать
> по окончанию работы?
VCL вроде того и сделано. только HDC обернут в TCanvas.
MBo (2009-02-16 17:39:00) [2]да
только не "получу CS_OWNDC для окна", а у окна в стиль должен быть включен этот ключ
clickmaker (2009-02-16 17:37:00) [3]если ресурсов достаточно, то да
но злоупотреблять не стоит этим, все-таки GDI не бездонный
@!!ex (2009-02-16 17:23:00) [4]Если я получу CS_OWNDC для окна под ОС не ниже XP, то могу только с ним работать?
clickmaker (2009-02-16 17:11:00) [5]потому что это некая внутренняя структура, которая инициализируется какждый раз при получении, к тому же не разделяемая между потоками.
Это - для обычных DC, которых в вин9х вообще ограниченное число - т.е. дань обратной совместимости.
Но есть еще классовые DC, которые разделяются между окнами одного класса, их не освобождают поэтому. Это для окон со стилем класса CS_CLASSDC.
Есть приватные DC, которые создаются один раз для каждого окна - CS_OWNDC, их тоже можно не освобождать, на на 9х они опять же приведут к быстрому перерасходу ресурсов.