PRB: Assertion Failed, WINCORE.CPP--Line 129, 133, 182, or 307Last reviewed: July 10, 1997Article ID: Q113421 |
1.00 1.50 1.51 1.52 | 1.00 2.00 2.10 4.00
WINDOWS | WINDOWS NTkbprg kbprb
The information in this article applies to:
SYMPTOMSOpening a dialog box in an application that subclasses a control of the dialog box using CWnd::SubclassDlgItem() or CWnd::SubclassWindow() causes an "Assertion Failed!" error in WINCORE.CPP. The line number reported depends on the version of the Microsoft Foundation Classes (MFC) being used:
Version 2.0 for Windows - Line 133
Version 2.5 for Windows - Line 182
Version 2.0 32-bit Edition - Line 129
Version 3.0 32-bit Edition - Line 283
Version 3.1 32-bit Edition - Line 315
Version 4.0 32-bit Edition - Line 307
CAUSEThe second ASSERT (below) in WINCORE.CPP is the one being hit:
BOOL CWnd::Attach(HWND hWndNew)
{
ASSERT(m_hWnd == NULL); // Only attach once, detach on destroy
ASSERT(FromHandlePermanent(hWndNew) == NULL);
// Must not be already in permanent map
...
This implies that the control that we are attempting to subclass has
already been subclassed.
With MFC dialog boxes, you can specify DDX/DDV member variables to associate with the controls of an MFC dialog class. These member variables can be real values (for example, int, CString) or control variables (for example, CEdit, CListBox). If the member variables are control variables, then the DDX/DDV handlers actually do subclass the dialog box controls using the control member variables. If you try to subclass those controls yourself, the above error can result.
RESOLUTIONIf you want to subclass controls yourself, then do not associate DDX/DDV variables with those controls. Alternatively, if you want to subclass controls but avoid the work, you can let the DDX/DDV routines work for you. To do this, use the following steps.
|
Additional reference words: 1.00 1.50 1.51 1.52 2.00 2.10 2.50 2.51 2.52
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |