Help and Support
 

powered byLive Search

FIX: Assertion Failed Line 388 of Occmgr.cpp

Retired KB ArticleThis article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
Article ID:143108
Last Review:November 21, 2006
Revision:2.1
This article was previously published under Q143108
On This Page

SYMPTOMS

When an MFC 4.0 control container has one or more invisible-at-run-time OLE controls along with other OLE and non-OLE controls placed on a dialog template, the following assertion might occur based on the tab-order of the controls in the dialog:
   Debug Assertion Failed!
   Program: <app name>
   File: occmgr.cpp
   Line: 388
				

Back to the top

CAUSE

When the MFC framework creates an invisible-at-run-time OLE control, it is reparented to the desktop window. This makes the control's window not a sibling of the other windows present in the dialog. Now if this invisible- at-run-time control has another OLE control (visible at run time) next in tab order, then the framework places the latter OLE control at the end of the dialog's child window list. Later when the framework attempts to find the "next" sibling window of the OLE control (now at the end of the dialog's child window list), it returns NULL because there is no "next" sibling window to this OLE control.

Back to the top

RESOLUTION

The assertion can be safely ignored, but the tab order will probably be incorrect. To work around this assertion, place the invisible-at-run-time controls at the end of the tab order in the dialog template.

Back to the top

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ 4.1.

Back to the top

MORE INFORMATION

The MFC framework creates OLE controls placed on a dialog template resource, if any, by calling COccManager::CreateDlgControls. This function in turn makes a call to COccManager::CreateDlgControl to create a specific OLE control. The code present in CreateDlgControl attempts to setup the tab order of each OLE control after it is created, for which it calls CWnd::SetWindowPos, passing in the handle of the window that the control will be inserted after (in the code, this window is referred to as pWndAfter).

For a clear understanding of what would generate the above described ASSERT, consider the following reproducible scenario.

Back to the top

Steps to Reproduce the Assertion Failure

Create a dialog-based control container application, and place the following controls with the specified tab order in its main dialog template resource:

MS-COMM OLE Control (or any invisible-at-run-time control) : 1
GRID OLE control (or any control that is visible at run time) : 2
Static control (or any standard Windows control) : 3
GRID OLE control (or any control that is visible at run time) : 4
Because the MS-COMM OLE control is reparented to the desktop, the GRID control next to it in the tab order will be created and placed at the end of this dialog's child window list. Later when the framework creates the final GRID control, it tries to find the static control that should precede this GRID control in the Z order, by finding the next sibling window of the second GRID control. But because there is no next sibling window to the second GRID control, it returns NULL, which triggers the ASSERT.

Back to the top


APPLIES TO
Microsoft Foundation Class Library 4.2, when used with:
  Microsoft Visual C++ 4.0 Standard Edition

Back to the top

Keywords: 
kbbug kbcontainer kbctrl kbfix kbnoupdate kbvc410fix KB143108

Back to the top

Article Translations

 

Other Support Options

  • Need More Help?
    Contact a Support professional by Email, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.