|
|
////////////////////////////////////////////////////////////////////////
//
// CExtractIcon
//
// IExtractIcon implementation
//
////////////////////////////////////////////////////////////////////////
#include "pch.hxx"
#include "cexticon.h"
CExtractIcon::CExtractIcon(int iIcon, int iIconOpen, UINT uFlags, LPSTR szModule) { DOUT("CExtractIcon::CExtractIcon");
m_cRef = 1; m_iIcon = iIcon; m_iIconOpen = iIconOpen; m_uFlags = uFlags; if (szModule) StrCpyN(m_szModule, szModule, ARRAYSIZE(m_szModule)); else GetModuleFileName(g_hInst, m_szModule, sizeof(m_szModule)/sizeof(char)); }
CExtractIcon::~CExtractIcon() { }
////////////////////////////////////////////////////////////////////////
//
// IUnknown
//
////////////////////////////////////////////////////////////////////////
HRESULT STDMETHODCALLTYPE CExtractIcon::QueryInterface(REFIID riid, void **ppvObject) { if (IsEqualIID(riid, IID_IUnknown)) { *ppvObject = (void *)this; } else if (IsEqualIID(riid, IID_IExtractIconA)) { *ppvObject = (IExtractIconA *)this; } else if (IsEqualIID(riid, IID_IExtractIconW)) { *ppvObject = (IExtractIconW *)this; } else { *ppvObject = NULL; return E_NOINTERFACE; }
m_cRef++; return NOERROR; }
ULONG STDMETHODCALLTYPE CExtractIcon::AddRef(void) { DOUT("CExtractIcon::AddRef() ==> %d", m_cRef+1); return ++m_cRef; }
ULONG STDMETHODCALLTYPE CExtractIcon::Release(void) { DOUT("CExtractIcon::Release() ==> %d", m_cRef-1);
if (--m_cRef==0) { delete this; return 0; } else return m_cRef; }
////////////////////////////////////////////////////////////////////////
//
// IExtractIconA
//
////////////////////////////////////////////////////////////////////////
HRESULT STDMETHODCALLTYPE CExtractIcon::GetIconLocation(UINT uFlags, LPSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) { StrCpyN(szIconFile, m_szModule, cchMax); *piIndex = (uFlags & GIL_OPENICON) ? m_iIconOpen : m_iIcon; *pwFlags = m_uFlags; return NOERROR; }
HRESULT STDMETHODCALLTYPE CExtractIcon::Extract(LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons) { // let the explorer extract the icon
return S_FALSE; }
#ifndef WIN16 // WIN16FF
////////////////////////////////////////////////////////////////////////
//
// IExtractIconW
//
////////////////////////////////////////////////////////////////////////
HRESULT STDMETHODCALLTYPE CExtractIcon::GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) { MultiByteToWideChar(CP_ACP, 0, m_szModule, -1, szIconFile, cchMax); *piIndex = (uFlags & GIL_OPENICON) ? m_iIconOpen : m_iIcon; *pwFlags = m_uFlags; return NOERROR; }
HRESULT STDMETHODCALLTYPE CExtractIcon::Extract(LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons) { // let the explorer extract the icon
return S_FALSE; } #endif // !WIN16
|