DOC: CImageList Returned from CreateDragImage Needs Delete (155436)



The information in this article applies to:

  • The Microsoft Foundation Classes (MFC), when used with:
    • Microsoft Visual C++, 32-bit Professional Edition 4.2
    • Microsoft Visual C++, 32-bit Enterprise Edition 4.2
    • Microsoft Visual C++, 32-bit Learning Edition 4.2

This article was previously published under Q155436

SUMMARY

The CTreeCtrl::CreateDragImage and CListCtrl::CreateDragImage functions in versions of MFC earlier than 4.2 return a pointer to a temporary CImageList object. In MFC version 4.2, CreateDragImage returns a permanent object that must be explicitly deleted.

The documentation for CreateDragImage does not state this.

This documentation error was fixed in Visual C++ version 5.0.

MORE INFORMATION

In versions of MFC earlier than 4.2, MFC implements CreateDragImage as CImageList::FromHandle. An object returned from FromHandle is temporary and does not need to be explicitly deleted. A limitation of this implementation is that the CImageList pointer can be safely used only in the current message being processed.

CreateDragImage function was changed in Visual C++ version 4.2 to allocate a permanent CImageList object, and can now be used when handling multiple messages. When finished using the pointer returned by CreateDragImage, however, it is now necessary to explicitly delete the object:
   CImageList* pImageList = CreateDragImage( ...

   delete pImageList;
				
For more information on temporary handles returned from FromHandle, see MFC TechNote "TN003: Mapping of Windows Handles to Objects" in the Visual C++ Books Online.

Modification Type:MajorLast Reviewed:12/1/2003
Keywords:kbBug kbdocerr kbdocfix kbfix KbUIDesign kbVC500fix KB155436