Hello

Dans un programme, j'ai crée une classe dérivée de CWnd. Cette classe fonctionne parfaitement, jusqu'au moment où je quitte le programme. A ce moment, j'obtient un message de type "Debug assertion failed", en provenance de la ligne 1002 du fichier wincore.cpp, ce qui correspond à une ligne de la fonction DestroyWindow.

Ma classe contient un contrôle enfant, dérivé de la classe CListBox, et initialisé comme suit dans la fonction OnCreate:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ( !m_List.Create ( WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LBS_DISABLENOSCROLL | LBS_NOTIFY, CRect( 0, 0, 0, 0 ),  this,  IDC_OUTPUTVIEW_LIST ) )
{
      TRACE0("Failed to create view for the CListBox in ZVOutputView\n");
      return -1;
}
 
// Get the log font.
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof( NONCLIENTMETRICS );
 
VERIFY( ::SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &ncm, 0 ) );
 
m_Font.CreateFontIndirect( &ncm.lfMessageFont );
m_List.SetFont( &m_Font );
m_List.SetHorizontalExtent( 2000 );
En plaçant un point d'arrêt dans la fonction DestroyWindow, j'ai pu constater que l'objet enfant n'était pas détruit lors de l'appel à cette fonction.

Est-ce pour cette raison que DestroyWindow plante quand il tente de détruire l'objet parent ? Si oui, comment dois-je utiliser le contrôle enfant pour qu'il fonctionne correctement ? Si non, quelqu'un connaît-il la raison pour laquelle la ligne 1002 de wincore me renvoie une erreur ?