Здравствуйте, 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