Re: CDC::FromHandle
От: Evgeniy Skvortsov Россия  
Дата: 29.04.15 09:46
Оценка: 4 (1)
Здравствуйте, Alexander G, Вы писали:

AG>Этот метод конструирует CDC для данного HDC и помещает его в некое хранилище, октуда он когда-нибудь будет удалён (если такого HDC там ещё нет).


AG>Зачем так делают? Почему не просто:

AG>
AG>LPDRAWITEMSTRUCT draw_item
AG>CDC dc;
AG>dc.Attach(draw_item->hDC);
AG>


FromHandle — создает временный CDC*, который нельзя где-то сохранять. Как раз для таких случаев — получили HANDLE из вне, сделали временный объект CDC*, что-то поделали и забыли

Суть в том, что разработчики MFC решили разделять по смыслу хэндлы созданные в программе и хэндлы полученные из вне. Им захотелось что бы в программе на MFC все хэндлы были обернуты в CDC (видимо что бы соблюдать принципы ООП)

Так вот полученные из вне хэндлы преобразуются в CDC* при помощи FromHandle и потом автоматически удаляются во время Idle time.

Собственно несколько более подробно это описано в комментариях в начале файла winhand_.h в исходниках MFC
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.