|
|
//
// Copyright 2001 - Microsoft Corporation
//
// Created By:
// Geoff Pease (GPease) 23-JAN-2001
//
// Maintained By:
// Geoff Pease (GPease) 23-JAN-2001
//
#include "pch.h"
#include "shutils.h"
#pragma hdrstop
//
// Borrowed so we can link to STOCK.LIB
//
#define SZ_DEBUGINI "ccshell.ini"
#define SZ_DEBUGSECTION "DOCPROP3"
#define SZ_MODULE "DOCPROP3"
#ifdef DEBUG
#define DECLARE_DEBUG
#endif
#ifdef DECLARE_DEBUG
// (These are deliberately CHAR)
EXTERN_C const CHAR c_szCcshellIniFile[] = SZ_DEBUGINI; EXTERN_C const CHAR c_szCcshellIniSecDebug[] = SZ_DEBUGSECTION;
EXTERN_C const WCHAR c_wszTrace[] = L"t " TEXTW(SZ_MODULE) L" "; EXTERN_C const WCHAR c_wszErrorDbg[] = L"err " TEXTW(SZ_MODULE) L" "; EXTERN_C const WCHAR c_wszWarningDbg[] = L"wn " TEXTW(SZ_MODULE) L" "; EXTERN_C const WCHAR c_wszAssertMsg[] = TEXTW(SZ_MODULE) L" Assert: "; EXTERN_C const WCHAR c_wszAssertFailed[] = TEXTW(SZ_MODULE) L" Assert %ls, line %d: (%ls)\r\n"; EXTERN_C const WCHAR c_wszRip[] = TEXTW(SZ_MODULE) L" RIP in %s at %s, line %d: (%s)\r\n"; EXTERN_C const WCHAR c_wszRipNoFn[] = TEXTW(SZ_MODULE) L" RIP at %s, line %d: (%s)\r\n";
// (These are deliberately CHAR)
EXTERN_C const CHAR c_szTrace[] = "t " SZ_MODULE " "; EXTERN_C const CHAR c_szErrorDbg[] = "err " SZ_MODULE " "; EXTERN_C const CHAR c_szWarningDbg[] = "wn " SZ_MODULE " "; EXTERN_C const CHAR c_szAssertMsg[] = SZ_MODULE " Assert: "; EXTERN_C const CHAR c_szAssertFailed[] = SZ_MODULE " Assert %s, line %d: (%s)\r\n"; EXTERN_C const CHAR c_szRip[] = SZ_MODULE " RIP in %s at %s, line %d: (%s)\r\n"; EXTERN_C const CHAR c_szRipNoFn[] = SZ_MODULE " RIP at %s, line %d: (%s)\r\n"; EXTERN_C const CHAR c_szRipMsg[] = SZ_MODULE " RIP: ";
#endif // DECLARE_DEBUG && DEBUG
#if defined(DECLARE_DEBUG) && defined(PRODUCT_PROF)
EXTERN_C const CHAR c_szCcshellIniFile[] = SZ_DEBUGINI; EXTERN_C const CHAR c_szCcshellIniSecDebug[] = SZ_DEBUGSECTION; #endif
//
// Use TraceFree( ) to free the handle returned here
//
// Return Values:
// S_OK
// Successfully extracted and copied the HIDA.
//
// E_OUTOFMEMORY
// Failed to copy the HIDA.
//
// other HRESULTs
//
HRESULT DataObj_CopyHIDA( IDataObject * pdtobjIn , CIDA ** ppidaOut ) { TraceFunc( "" );
HRESULT hr; STGMEDIUM medium;
static CLIPFORMAT g_cfHIDA = 0;
FORMATETC fmte = { 0, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
// Check parameters
Assert( NULL != pdtobjIn ); Assert( NULL != ppidaOut );
// Clear out parameter
*ppidaOut = NULL;
//
// Register clip format if not already done.
//
if ( 0 == g_cfHIDA ) { g_cfHIDA = (CLIPFORMAT) RegisterClipboardFormat( CFSTR_SHELLIDLIST ); }
fmte.cfFormat = g_cfHIDA;
//
// Retrieve HIDA
//
hr = THR( pdtobjIn->GetData( &fmte, &medium ) ); if ( SUCCEEDED( hr ) ) { SIZE_T sizet = GlobalSize( medium.hGlobal ); if ( (~((DWORD) 0)) > sizet ) { DWORD cb = (DWORD) sizet; CIDA * pida = (CIDA *) TraceAlloc( 0, cb ); if ( NULL != pida ) { void * pv = GlobalLock( medium.hGlobal ); CopyMemory( pida, pv, cb ); GlobalUnlock( medium.hGlobal );
*ppidaOut = pida; } else { hr = E_OUTOFMEMORY; } } else { hr = E_OUTOFMEMORY; }
ReleaseStgMedium( &medium ); }
HRETURN( hr ); }
//
//
//
HRESULT BindToObjectWithMode( LPCITEMIDLIST pidlIn , DWORD grfModeIn , REFIID riidIn , void ** ppvIn ) { TraceFunc( "" );
HRESULT hr; IBindCtx *pbc;
// Check parameters
Assert( NULL != pidlIn ); Assert( NULL != ppvIn );
*ppvIn = 0;
hr = THR( BindCtx_CreateWithMode( grfModeIn, &pbc ) ); if ( SUCCEEDED( hr ) ) { hr = THR( SHBindToObjectEx( NULL, pidlIn, pbc, riidIn, ppvIn ) ); pbc->Release(); }
HRETURN( hr ); }
//
//
//
STDAPI_(LPITEMIDLIST) IDA_FullIDList( CIDA * pidaIn , UINT idxIn ) { TraceFunc( "" );
LPITEMIDLIST pidl = NULL; LPCITEMIDLIST pidlParent = IDA_GetIDListPtr( pidaIn, (UINT) -1 ); if ( NULL != pidlParent ) { LPCITEMIDLIST pidlRel = IDA_GetIDListPtr( pidaIn, idxIn ); if ( NULL != pidlRel ) { pidl = ILCombine( pidlParent, pidlRel ); } }
RETURN( pidl ); }
|