#include "ControlSite.h" STDMETHODIMP ControlSite::QueryInterface(REFIID iid, void** out) { if (iid == IID_IUnknown || iid == IID_IOleClientSite) { *out = static_cast(this); } else if (iid == IID_IOleWindow || iid == IID_IOleInPlaceSite) { *out = static_cast(this); } else if (iid == IID_IOleInPlaceUIWindow || iid == IID_IOleInPlaceFrame) { *out = static_cast(this); } else { *out = nullptr; return E_NOINTERFACE; } AddRef(); return S_OK; } STDMETHODIMP_(ULONG) ControlSite::AddRef() { return ++references_; } STDMETHODIMP_(ULONG) ControlSite::Release() { ULONG left = --references_; if (left == 0) { delete this; } return left; } STDMETHODIMP ControlSite::GetWindowContext(IOleInPlaceFrame** frame, IOleInPlaceUIWindow** document, LPRECT position, LPRECT clip, LPOLEINPLACEFRAMEINFO info) { *frame = static_cast(this); AddRef(); *document = nullptr; GetClientRect(parent_, position); *clip = *position; info->cb = sizeof(OLEINPLACEFRAMEINFO); info->fMDIApp = FALSE; info->hwndFrame = parent_; info->haccel = nullptr; info->cAccelEntries = 0; return S_OK; }