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:
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.
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 );
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 ?
Partager