An AppWizard application generated with OLE Container and Splitter Window
support will generate an Access Violation when a splitter pane containing
an in-place active item is closed. The Access Violation occurs when you try
to call m_pView->AssertValid() from the COleClientItem::AssertValid()
function.
Back to the top
The AppWizard fails to add an OnDestroy() member function to the view class
to deactivate the in-place active object when the view containing the
in-place active object is destroyed. When the view containing the active
object is destroyed, the remaining view is resized. Because the object in
the destroyed view was not properly deactivated, the subsequent call to
GetInPlaceActiveObject() in the view's OnSize() function erroneously
detects an in-place active COleClientItem object.
Back to the top
To work around the problem, add the following handler for the WM_DESTROY
message to your view class:
void CYourView::OnDestroy()
{
CView::OnDestroy();
COleClientItem* pActiveItem =
GetDocument()->GetInPlaceActiveItem(this);
if (pActiveItem != NULL && pActiveItem->GetActiveView() == this)
{
pActiveItem->Deactivate();
ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
}
}
Back to the top
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This problem has been fixed in Visual C++
version 5.0.
Back to the top