DOC: CDC::SelectObject, CDC::SelectStockObject Return
Article ID: 117686
Article Last Modified on 11/21/2006
APPLIES TO
- Microsoft Foundation Class Library 4.2, when used with:
- Microsoft C/C++ Professional Development System 7.0
- Microsoft Visual C++ 1.0 Professional Edition
- Microsoft Visual C++ 1.5 Professional Edition
- Microsoft Visual C++ 1.51
- Microsoft Visual C++ 1.52 Professional Edition
- Microsoft Visual C++ 1.0 Professional Edition
- Microsoft Visual C++ 2.0 Professional Edition
This article was previously published under Q117686
SUMMARY
The pointer to a CGdiObject that is returned from CDC::SelectObject() or CDC::SelectStockObject() is stored for use. When the pointer is used later, it causes unexpected behavior [for example, a general protection fault (GPF) or heap corruption].
The documentation for the SelectObject() member does not make clear that the pointer returned from the call might point to a temporary object that is only valid during processing of one Windows message. This is an error in the documentation.
The CDC::SelectObject() and CDC::SelectStockObject() functions make a call to CGdiObject::FromHandle() to determine which CGdiObject object to return. If there is no CGdiObject object attached to the Windows GDI object that is currently selected in the DC, then a temporary object is created. See the documentation for CGdiObject::FromHandle() for further information.
REFERENCES
For further information on mapping C++ objects to handles in the MFC, see
MFC TechNote #3, "Mapping of Windows Handles to Objects."
NOTE: The documentation for Visual C++ 2.0 (MFC 3.0) has been corrected.
Additional query words: 7.00 1.00 1.50 2.00 2.10 2.50 CBrush CFont CPalette CPen
Keywords: kbbug kbdocfix kbvc200fix KB117686