Help and Support
 

powered byLive Search

FIX: Default OLE Container w/ Splitters Faults on View Closure

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:148139
Last Review:December 9, 2003
Revision:3.0
This article was previously published under Q148139
On This Page

SYMPTOMS

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

CAUSE

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

RESOLUTION

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

STATUS

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

MORE INFORMATION

Steps to Reproduce Problem

1.Create an SDI or MDI application with AppWizard. Select OLE Container support in Step 3, and select the Use split window check box in the Windows Styles tab of the Advanced Options dialog box in Step 4.
2.Build a DEBUG version of the application, and run it.
3.Click Insert New Object on the Edit menu, and insert an object that supports in-place activation. For example, use Microsoft Word or Microsoft Excel. The object should appear in the container application and be activated in-place.
4.Split the container's view window. You should see two objects, one of which is in-place active and the other of which is a copy of the in-place active object.
5.Drag the splitter bar so that the view containing the in-place active object is removed and destroyed. As a result, an unhandled exception Access Violation occurs in COleClientItem::AssertValid().

Back to the top


APPLIES TO
The AppWizard, when used with:
  Microsoft Visual C++ 4.0 Standard Edition
  Microsoft Visual C++ 4.1 Subscription
  Microsoft Visual C++ 4.2 Enterprise Edition
  Microsoft Visual C++ 4.2 Professional Edition

Back to the top

Keywords: 
kbbug kbcontainer kbfix kbnoupdate kbvc500fix kbwizard KB148139

Back to the top

Article Translations

 

Other Support Options

  • Need More Help?
    Contact a Support professional by E-mail, 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.