Source code of Windows XP (NT5)
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.
|
|
#include "dataobj.h"
extern HINSTANCE g_hInstance;
DWORD g_dwID=0; DWORD g_foobar;
CDataObject::CDataObject( LPUNKNOWN pUnkOuter, PFNDESTROYED pfnDestroy ) { m_cRef = 0; m_pUnkOuter = pUnkOuter; m_pfnDestroy = pfnDestroy;
m_hWndAdvise = NULL; m_dwAdvFlags = ADVF_NODATA;
m_pIDataObject = NULL; m_pIDataAdviseHolder = NULL;
m_cfeGet = CFORMATETCGET; SETDefFormatEtc(m_rgfeGet[0], CF_TEXT, TYMED_HGLOBAL);
m_dataText = NULL; m_cDataSize = DATASIZE_FROM_INDEX(1);
return; }
CDataObject::~CDataObject(void) { if (NULL != m_dataText) delete m_dataText;
if (NULL != m_pIDataAdviseHolder) m_pIDataAdviseHolder->Release();
if (NULL != m_pIDataObject) delete m_pIDataObject;
if (NULL != m_hWndAdvise) DestroyWindow(m_hWndAdvise); }
BOOL CDataObject::FInit(void) { LPUNKNOWN pIUnknown = (LPUNKNOWN)this;
// Create the contained "IDataObject" interface and
// pass it the correct containing IUnknown.
if (NULL != m_pUnkOuter) pIUnknown = m_pUnkOuter;
m_pIDataObject = new CImpIDataObject(this, pIUnknown);
if (NULL == m_pIDataObject) return FALSE;
// [ Code for "Advise Window" goes here. ]
return TRUE; }
STDMETHODIMP CDataObject::QueryInterface( REFIID riid, LPLPVOID ppv ) { *ppv = NULL; if (IsEqualIID(riid, IID_IUnknown)) *ppv = (LPVOID)this;
if (IsEqualIID(riid, IID_IDataObject)) *ppv = (LPVOID) m_pIDataObject;
if(NULL != *ppv) { ((LPUNKNOWN)*ppv)->AddRef(); return NOERROR; } return ResultFromScode(E_NOINTERFACE); }
STDMETHODIMP_(ULONG) CDataObject::AddRef(void) { return ++m_cRef; }
STDMETHODIMP_(ULONG) CDataObject::Release(void) { ULONG cRefT;
cRefT = --m_cRef;
if (0==m_cRef) { if (NULL != m_pfnDestroy) (*m_pfnDestroy)(); delete this; } return cRefT; }
#ifdef NOT_SIMPLE
LRESULT APIENTRY AdvisorWndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { PCDataObject pDO;
pDO = (PCDataObject)(GetWindowLong)(hWnd, 0);
switch (iMsg) { case WM_NCCREATE: pDO = (PCDataObject) ((LONG)((LPCREATESTRUCT)lParam) ->lpCreateParams); SetWindowLong(hWnd, 0, (LONG)pDO); return (DefWindowProc(hWnd, iMsg, wParam, lParam));
#ifdef FINISHED
case WM_CLOSE: // Forbid the Task Manager from closing us.
return 0L; #endif /* Finished */
case WM_COMMAND: // [ Code for "Advise Window" goes here. ]
break;
default: return (DefWindowProc(hWnd, iMsg, wParam, lParam)); } return 0L; } #endif /* NOT_SIMPLE */
|