unsafe HRESULT IOleClientSite.ShowObject() { Debug.WriteLineIf(AxHTraceSwitch.TraceVerbose, "in ShowObject"); if (host.GetAxState(AxHost.fOwnWindow)) { Debug.Fail("we can't be in showobject if we own our window..."); return(HRESULT.S_OK); } if (host.GetAxState(AxHost.fFakingWindow)) { // we really should not be here... // this means that the ctl inplace deactivated and didn't call on inplace activate before calling showobject // so we need to destroy our fake window first... host.DestroyFakeWindow(); // The fact that we have a fake window means that the OCX inplace deactivated when we hid it. It means // that we have to bring it back from RUNNING to INPLACE so that it can re-create its handle properly. // host.TransitionDownTo(OC_LOADED); host.TransitionUpTo(OC_INPLACE); } if (host.GetOcState() < OC_INPLACE) { return(HRESULT.S_OK); } IntPtr hwnd = IntPtr.Zero; if (host.GetInPlaceObject().GetWindow(&hwnd).Succeeded()) { if (host.GetHandleNoCreate() != hwnd) { host.DetachWindow(); if (hwnd != IntPtr.Zero) { host.AttachWindow(hwnd); } } } else if (host.GetInPlaceObject() is IOleInPlaceObjectWindowless) { Debug.WriteLineIf(AxHTraceSwitch.TraceVerbose, "Windowless control."); throw new InvalidOperationException(SR.AXWindowlessControl); } return(HRESULT.S_OK); }