mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.8 KiB
142 lines
3.8 KiB
// This is a part of the Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992-1995 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// This source code is only intended as a supplement to the
|
|
// Microsoft Foundation Classes Reference and related
|
|
// electronic documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Microsoft Foundation Classes product.
|
|
|
|
#include "stdafx.h"
|
|
|
|
#ifdef AFXCTL_CORE1_SEG
|
|
#pragma code_seg(AFXCTL_CORE1_SEG)
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// _AFXCTL_AMBIENT_CACHE implementation
|
|
|
|
THREAD_LOCAL(_AFXCTL_AMBIENT_CACHE, _afxAmbientCache)
|
|
|
|
_AFXCTL_AMBIENT_CACHE::_AFXCTL_AMBIENT_CACHE()
|
|
{
|
|
}
|
|
|
|
void _AFXCTL_AMBIENT_CACHE::Cache(QACONTAINER* pQAContainer)
|
|
{
|
|
m_bValid = (pQAContainer != NULL);
|
|
if (m_bValid)
|
|
{
|
|
memcpy(&m_dwAmbientFlags, &pQAContainer->dwAmbientFlags,
|
|
sizeof(_AFXCTL_AMBIENT_CACHE) -
|
|
offsetof(_AFXCTL_AMBIENT_CACHE, m_dwAmbientFlags));
|
|
if (m_pFont != NULL)
|
|
m_pFont->AddRef();
|
|
}
|
|
else
|
|
{
|
|
if (m_pFont != NULL)
|
|
m_pFont->Release();
|
|
memset(&m_dwAmbientFlags, 0,
|
|
sizeof(_AFXCTL_AMBIENT_CACHE) -
|
|
offsetof(_AFXCTL_AMBIENT_CACHE, m_dwAmbientFlags));
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COleControl::XQuickActivate
|
|
|
|
STDMETHODIMP_(ULONG) COleControl::XQuickActivate::AddRef()
|
|
{
|
|
// Delegate to our exported AddRef.
|
|
METHOD_PROLOGUE_EX_(COleControl, QuickActivate)
|
|
return (ULONG)pThis->ExternalAddRef();
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) COleControl::XQuickActivate::Release()
|
|
{
|
|
// Delegate to our exported Release.
|
|
METHOD_PROLOGUE_EX_(COleControl, QuickActivate)
|
|
return (ULONG)pThis->ExternalRelease();
|
|
}
|
|
|
|
STDMETHODIMP COleControl::XQuickActivate::QueryInterface(
|
|
REFIID iid, LPVOID* ppvObj)
|
|
{
|
|
// Delegate to our exported QueryInterface.
|
|
METHOD_PROLOGUE_EX_(COleControl, QuickActivate)
|
|
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
|
|
}
|
|
|
|
STDMETHODIMP COleControl::XQuickActivate::QuickActivate(
|
|
QACONTAINER *pQAContainer, QACONTROL *pQAControl)
|
|
{
|
|
METHOD_PROLOGUE_EX_(COleControl, QuickActivate)
|
|
|
|
// Get the IOleObject interface
|
|
HRESULT hr = S_OK;
|
|
IOleObject* pOleObject = NULL;
|
|
if (FAILED(hr = pThis->ExternalQueryInterface(&IID_IOleObject,
|
|
reinterpret_cast<void**>(&pOleObject))))
|
|
{
|
|
return hr;
|
|
}
|
|
|
|
// Keep copy of ambient properties
|
|
_afxAmbientCache->Cache(pQAContainer);
|
|
|
|
// Set client site
|
|
ASSERT(pOleObject != NULL);
|
|
pOleObject->SetClientSite(pQAContainer->pClientSite);
|
|
|
|
// Establish connections
|
|
DWORD dwDummy;
|
|
if (pQAContainer->pAdviseSink != NULL)
|
|
pOleObject->Advise(pQAContainer->pAdviseSink, &dwDummy);
|
|
|
|
if (pQAContainer->pPropertyNotifySink != NULL)
|
|
pThis->m_xPropConnPt.m_xConnPt.Advise(pQAContainer->pPropertyNotifySink,
|
|
&pQAControl->dwPropNotifyCookie);
|
|
if (pQAContainer->pUnkEventSink != NULL)
|
|
pThis->m_xEventConnPt.m_xConnPt.Advise(pQAContainer->pUnkEventSink,
|
|
&pQAControl->dwEventCookie);
|
|
|
|
// Fill in return values
|
|
IViewObjectEx* pViewObject;
|
|
if (SUCCEEDED(pThis->ExternalQueryInterface(&IID_IViewObjectEx,
|
|
reinterpret_cast<void**>(&pViewObject))))
|
|
{
|
|
pViewObject->GetViewStatus(&pQAControl->dwViewStatus);
|
|
pViewObject->Release();
|
|
}
|
|
else
|
|
{
|
|
pQAControl->dwViewStatus = 0;
|
|
}
|
|
|
|
pOleObject->GetMiscStatus(DVASPECT_CONTENT, &pQAControl->dwMiscStatus);
|
|
|
|
pOleObject->Release();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP COleControl::XQuickActivate::SetContentExtent(LPSIZEL lpsizel)
|
|
{
|
|
METHOD_PROLOGUE_EX_(COleControl, QuickActivate)
|
|
return pThis->m_xOleObject.SetExtent(DVASPECT_CONTENT, lpsizel);
|
|
}
|
|
|
|
STDMETHODIMP COleControl::XQuickActivate::GetContentExtent(LPSIZEL lpsizel)
|
|
{
|
|
METHOD_PROLOGUE_EX_(COleControl, QuickActivate)
|
|
return pThis->m_xOleObject.GetExtent(DVASPECT_CONTENT, lpsizel);
|
|
}
|