Microsoft KB Archive/105081

= PRB: "Warning: Calling DestroyWindow in CWnd::~CWnd" Message =

Article ID: 105081

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 6.1

 Microsoft Visual C++ 6.0 Professional Edition

 Microsoft Visual C++ 6.0 Enterprise Edition

 Microsoft Visual C++ 5.0 Learning Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q105081

<div class="notice_section">

<div class="symptoms_section">

SYMPTOMS
The following warnings are displayed when a debug version of a program is executed and TRACE diagnostics are enabled:

<pre class="fixed_text">  Warning: calling DestroyWindow in CWnd::~CWnd OnDestroy or PostNcDestroy in derived class will not be called

<div class="cause_section">

CAUSE
The above warnings are displayed by the CWnd::~CWnd destructor. The warnings indicate the following:


 * The programmer has most likely called "delete" on a CWnd object rather than DestroyWindow.
 * An object derived from CWnd is not performing a DestroyWindow call in its destructor.
 * Because the DestroyWindow call is executed in the destructor for CWnd, only the CWnd portion of the CWnd-derived object is remaining when the DestroyWindow is called. Thus, if you have a CWnd-derived object and receive this warning, the derived object's virtual functions will not exist and the CWnd functions will be called instead.

<div class="resolution_section">

RESOLUTION
MFC Technote #17 contains more information on how to properly destroy a Window object and states the following cardinal rule:

<pre class="fixed_text">  To destroy a C++ Windows object, use DestroyWindow, not "delete".

Also, examining CWnd::~CWnd will reveal that the foremost task of the destructor is to ensure that the associated Windows window object has been destroyed. If a program calls DestroyWindow before the CWnd destructor is called, the m_hWnd data member will be NULL, the TRACE0 messages will not occur, and DestroyWindow will not be called in CWnd::~CWnd.

Keywords: kbprb kbwndw KB105081

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.