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.
132 lines
2.9 KiB
132 lines
2.9 KiB
// ddeadv.cpp
|
|
//
|
|
// Mapping from DDE advise to/from OLE 2.0 advises
|
|
//
|
|
// Author:
|
|
// Jason Fuller jasonful 8-16-92
|
|
//
|
|
// Copyright (c) 1992 Microsoft Corporation
|
|
|
|
#include "ole2int.h"
|
|
#include "srvr.h"
|
|
#include "ddedebug.h"
|
|
ASSERTDATA
|
|
|
|
|
|
INTERNAL CDefClient::DoOle20Advise
|
|
(OLE_NOTIFICATION options,
|
|
CLIPFORMAT cf)
|
|
{
|
|
HRESULT hresult = NOERROR;
|
|
FORMATETC formatetc;
|
|
formatetc.cfFormat = cf;
|
|
formatetc.ptd = m_ptd;
|
|
formatetc.lindex = DEF_LINDEX;
|
|
formatetc.dwAspect = DVASPECT_CONTENT;
|
|
// only types 1.0 client wants
|
|
formatetc.tymed = TYMED_HGLOBAL | TYMED_MFPICT | TYMED_GDI;
|
|
|
|
intrDebugOut((DEB_ITRACE,
|
|
"%x _IN CDefClient::DoOle20Advise(options=%x,cf=%x)\n",
|
|
this,
|
|
options,
|
|
(ULONG)cf));
|
|
ChkC(this);
|
|
switch (options)
|
|
{
|
|
case OLE_CHANGED:
|
|
#ifdef UPDATE
|
|
case OLE_SAVED:
|
|
#endif
|
|
if (0 == m_dwConnectionDataObj)
|
|
{
|
|
Assert (m_lpdataObj);
|
|
RetErr (m_lpdataObj->DAdvise (&formatetc,0/* ADVF_PRIMEFIRST*/,
|
|
&m_AdviseSink,
|
|
&m_dwConnectionDataObj));
|
|
Assert (m_dwConnectionDataObj != 0);
|
|
}
|
|
// Fall through:
|
|
// Even for OLE_CHANGED do an Ole Advise so we get OnClose
|
|
// notifications for linked objects.
|
|
|
|
#ifndef UPDATE
|
|
case OLE_SAVED:
|
|
#endif
|
|
case OLE_RENAMED: // Link case
|
|
case OLE_CLOSED:
|
|
Assert (m_lpoleObj);
|
|
// Only do one OleObject::Advise even if 1.0 client asks
|
|
// for two advises for two different formats and two events,
|
|
// i.e., native and metafile, save and close.
|
|
if (m_lpoleObj && 0==m_dwConnectionOleObj)
|
|
{
|
|
Puts ("Calling OleObject::Advise\r\n");
|
|
Assert (m_dwConnectionOleObj == 0L);
|
|
hresult = m_lpoleObj->Advise (&m_AdviseSink, &m_dwConnectionOleObj);
|
|
if (hresult != NOERROR)
|
|
{
|
|
goto errRtn;
|
|
}
|
|
}
|
|
Assert (m_dwConnectionOleObj != 0);
|
|
break;
|
|
|
|
default:
|
|
Assert(0);
|
|
break;
|
|
}
|
|
|
|
errRtn:
|
|
intrDebugOut((DEB_ITRACE,
|
|
"%x _OUT CDefClient::DoOle20Advise hresult=%x\n",
|
|
this,hresult));
|
|
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
|
|
|
|
INTERNAL CDefClient::DoOle20UnAdviseAll
|
|
(void)
|
|
{
|
|
HRESULT hr;
|
|
intrDebugOut((DEB_ITRACE,
|
|
"%x _IN CDefClient::DoOle20UnAdviseAll\n",
|
|
this));
|
|
|
|
ChkC(this);
|
|
if (m_dwConnectionOleObj != 0L)
|
|
{
|
|
if (m_lpoleObj)
|
|
{
|
|
intrDebugOut((DEB_ITRACE,
|
|
"%x ::DoOle20UnAdviseAll unadvise OLE obj\n",
|
|
this));
|
|
Puts ("Unadvising ole obj\r\n");
|
|
hr = m_lpoleObj->Unadvise (m_dwConnectionOleObj);
|
|
intrAssert(hr == NOERROR);
|
|
m_dwConnectionOleObj = 0L;
|
|
}
|
|
}
|
|
if (m_dwConnectionDataObj != 0L)
|
|
{
|
|
if (m_lpdataObj)
|
|
{
|
|
intrDebugOut((DEB_ITRACE,
|
|
"%x ::DoOle20UnAdviseAll unadvise DATA obj\n",
|
|
this));
|
|
Puts ("Unadvising data obj\r\n");
|
|
hr = m_lpdataObj->DUnadvise (m_dwConnectionDataObj);
|
|
intrAssert(hr == NOERROR);
|
|
m_dwConnectionDataObj = 0L;
|
|
}
|
|
}
|
|
intrDebugOut((DEB_ITRACE,
|
|
"%x _OUT CDefClient::DoOle20UnAdviseAll\n",
|
|
this));
|
|
|
|
return NOERROR;
|
|
}
|