2 * Copyright 1997 Marcus Meissner
3 * Copyright 1998 Juergen Schmied
14 #include "interfaces.h"
23 #include "shell32_main.h"
26 /******************************************************************************
27 * foreward declaration
30 /* IExtractIcon implementation*/
31 static HRESULT WINAPI
IExtractIcon_QueryInterface(LPEXTRACTICON
, REFIID
, LPVOID
*);
32 static ULONG WINAPI
IExtractIcon_AddRef(LPEXTRACTICON
);
33 static ULONG WINAPI
IExtractIcon_AddRef(LPEXTRACTICON
);
34 static ULONG WINAPI
IExtractIcon_Release(LPEXTRACTICON
);
35 static HRESULT WINAPI
IExtractIcon_GetIconLocation(LPEXTRACTICON
, UINT32
, LPSTR
, UINT32
, int *, UINT32
*);
36 static HRESULT WINAPI
IExtractIcon_Extract(LPEXTRACTICON
, LPCSTR
, UINT32
, HICON32
*, HICON32
*, UINT32
);
39 /***********************************************************************
40 * IExtractIcon implementation
42 static struct IExtractIcon_VTable eivt
=
43 { IExtractIcon_QueryInterface
,
46 IExtractIcon_GetIconLocation
,
49 /**************************************************************************
50 * IExtractIcon_Constructor
52 LPEXTRACTICON
IExtractIcon_Constructor(LPCITEMIDLIST pidl
)
55 ei
=(LPEXTRACTICON
)HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIcon
));
58 ei
->pidl
=ILClone(pidl
);
62 TRACE(shell
,"(%p)\n",ei
);
65 /**************************************************************************
66 * IExtractIcon_QueryInterface
68 static HRESULT WINAPI
IExtractIcon_QueryInterface( LPEXTRACTICON
this, REFIID riid
, LPVOID
*ppvObj
)
70 WINE_StringFromCLSID((LPCLSID
)riid
,xriid
);
71 TRACE(shell
,"(%p)->(\n\tIID:\t%s,%p)\n",this,xriid
,ppvObj
);
75 if(IsEqualIID(riid
, &IID_IUnknown
)) /*IUnknown*/
78 else if(IsEqualIID(riid
, &IID_IExtractIcon
)) /*IExtractIcon*/
79 { *ppvObj
= (IExtractIcon
*)this;
83 { (*(LPEXTRACTICON
*)ppvObj
)->lpvtbl
->fnAddRef(this);
84 TRACE(shell
,"-- Interface: (%p)->(%p)\n",ppvObj
,*ppvObj
);
87 TRACE(shell
,"-- Interface: E_NOINTERFACE\n");
91 /**************************************************************************
94 static ULONG WINAPI
IExtractIcon_AddRef(LPEXTRACTICON
this)
95 { TRACE(shell
,"(%p)->(count=%lu)\n",this,(this->ref
)+1);
98 /**************************************************************************
99 * IExtractIcon_Release
101 static ULONG WINAPI
IExtractIcon_Release(LPEXTRACTICON
this)
102 { TRACE(shell
,"(%p)->()\n",this);
104 { TRACE(shell
," destroying IExtractIcon(%p)\n",this);
106 HeapFree(GetProcessHeap(),0,this);
111 /**************************************************************************
112 * IExtractIcon_GetIconLocation
114 static HRESULT WINAPI
IExtractIcon_GetIconLocation(LPEXTRACTICON
this, UINT32 uFlags
, LPSTR szIconFile
, UINT32 cchMax
, int * piIndex
, UINT32
* pwFlags
)
115 { WARN (shell
,"(%p) (flags=%u file=%s max=%u %p %p) semi-stub\n", this, uFlags
, szIconFile
, cchMax
, piIndex
, pwFlags
);
117 *piIndex
= (int) SHMapPIDLToSystemImageListIndex(0, this->pidl
,0);
118 *pwFlags
= GIL_NOTFILENAME
;
120 WARN (shell
,"-- %x\n",*piIndex
);
124 /**************************************************************************
125 * IExtractIcon_Extract
127 static HRESULT WINAPI
IExtractIcon_Extract(LPEXTRACTICON
this, LPCSTR pszFile
, UINT32 nIconIndex
, HICON32
*phiconLarge
, HICON32
*phiconSmall
, UINT32 nIconSize
)
128 { FIXME (shell
,"(%p) (file=%s index=%u %p %p size=%u) semi-stub\n", this, pszFile
, nIconIndex
, phiconLarge
, phiconSmall
, nIconSize
);
129 *phiconLarge
= pImageList_GetIcon(ShellBigIconList
, nIconIndex
, ILD_TRANSPARENT
);
130 *phiconSmall
= pImageList_GetIcon(ShellSmallIconList
, nIconIndex
, ILD_TRANSPARENT
);