2 * Copyright 1997 Marcus Meissner
3 * Copyright 1998 Juergen Schmied
13 #include "shell32_main.h"
17 /******************************************************************************
18 * foreward declaration
21 /* IExtractIcon implementation*/
22 static HRESULT WINAPI IExtractIcon_QueryInterface(LPEXTRACTICON, REFIID, LPVOID *);
23 static ULONG WINAPI IExtractIcon_AddRef(LPEXTRACTICON);
24 static ULONG WINAPI IExtractIcon_AddRef(LPEXTRACTICON);
25 static ULONG WINAPI IExtractIcon_Release(LPEXTRACTICON);
26 static HRESULT WINAPI IExtractIcon_GetIconLocation(LPEXTRACTICON, UINT32, LPSTR, UINT32, int *, UINT32 *);
27 static HRESULT WINAPI IExtractIcon_Extract(LPEXTRACTICON, LPCSTR, UINT32, HICON32 *, HICON32 *, UINT32);
30 /***********************************************************************
31 * IExtractIcon implementation
33 static struct IExtractIcon_VTable eivt =
34 { IExtractIcon_QueryInterface,
37 IExtractIcon_GetIconLocation,
40 /**************************************************************************
41 * IExtractIcon_Constructor
43 LPEXTRACTICON IExtractIcon_Constructor(LPCITEMIDLIST pidl)
46 ei=(LPEXTRACTICON)HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIcon));
49 ei->pidl=ILClone(pidl);
53 TRACE(shell,"(%p)\n",ei);
57 /**************************************************************************
58 * IExtractIcon_QueryInterface
60 static HRESULT WINAPI IExtractIcon_QueryInterface( LPEXTRACTICON this, REFIID riid, LPVOID *ppvObj)
62 WINE_StringFromCLSID((LPCLSID)riid,xriid);
63 TRACE(shell,"(%p)->(\n\tIID:\t%s,%p)\n",this,xriid,ppvObj);
67 if(IsEqualIID(riid, &IID_IUnknown)) /*IUnknown*/
70 else if(IsEqualIID(riid, &IID_IExtractIcon)) /*IExtractIcon*/
71 { *ppvObj = (IExtractIcon*)this;
75 { (*(LPEXTRACTICON*)ppvObj)->lpvtbl->fnAddRef(this);
76 TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
79 TRACE(shell,"-- Interface: E_NOINTERFACE\n");
83 /**************************************************************************
86 static ULONG WINAPI IExtractIcon_AddRef(LPEXTRACTICON this)
87 { TRACE(shell,"(%p)->(count=%lu)\n",this,(this->ref)+1);
93 /**************************************************************************
94 * IExtractIcon_Release
96 static ULONG WINAPI IExtractIcon_Release(LPEXTRACTICON this)
97 { TRACE(shell,"(%p)->()\n",this);
102 { TRACE(shell," destroying IExtractIcon(%p)\n",this);
104 HeapFree(GetProcessHeap(),0,this);
109 /**************************************************************************
110 * IExtractIcon_GetIconLocation
112 static HRESULT WINAPI IExtractIcon_GetIconLocation(LPEXTRACTICON this, UINT32 uFlags, LPSTR szIconFile, UINT32 cchMax, int * piIndex, UINT32 * pwFlags)
113 { WARN (shell,"(%p) (flags=%u file=%s max=%u %p %p) semi-stub\n", this, uFlags, szIconFile, cchMax, piIndex, pwFlags);
115 *piIndex = (int) SHMapPIDLToSystemImageListIndex(0, this->pidl,0);
116 *pwFlags = GIL_NOTFILENAME;
118 WARN (shell,"-- %x\n",*piIndex);
122 /**************************************************************************
123 * IExtractIcon_Extract
125 static HRESULT WINAPI IExtractIcon_Extract(LPEXTRACTICON this, LPCSTR pszFile, UINT32 nIconIndex, HICON32 *phiconLarge, HICON32 *phiconSmall, UINT32 nIconSize)
126 { FIXME (shell,"(%p) (file=%s index=%u %p %p size=%u) semi-stub\n", this, pszFile, nIconIndex, phiconLarge, phiconSmall, nIconSize);
127 *phiconLarge = pImageList_GetIcon(ShellBigIconList, nIconIndex, ILD_TRANSPARENT);
128 *phiconSmall = pImageList_GetIcon(ShellSmallIconList, nIconIndex, ILD_TRANSPARENT);