*/
class CDrivesFolderEnum :
- public IEnumIDListImpl
+ public CEnumIDListBase
{
public:
CDrivesFolderEnum();
*/
HRESULT WINAPI CDrivesFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
{
- CComObject<CDrivesFolderEnum> *theEnumerator;
- CComPtr<IEnumIDList> result;
- HRESULT hResult;
-
- TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList);
-
- if (ppEnumIDList == NULL)
- return E_POINTER;
-
- *ppEnumIDList = NULL;
- ATLTRY(theEnumerator = new CComObject<CDrivesFolderEnum>);
-
- if (theEnumerator == NULL)
- return E_OUTOFMEMORY;
-
- hResult = theEnumerator->QueryInterface(IID_IEnumIDList, (void **)&result);
- if (FAILED(hResult))
- {
- delete theEnumerator;
- return hResult;
- }
-
- hResult = theEnumerator->Initialize(hwndOwner, dwFlags);
- if (FAILED(hResult))
- return hResult;
- *ppEnumIDList = result.Detach();
-
- TRACE("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList);
-
- return S_OK;
+ return ShellObjectCreatorInit<CDrivesFolderEnum>(hwndOwner, dwFlags, IID_IEnumIDList, ppEnumIDList);
}
/**************************************************************************
*/
HRESULT WINAPI CDrivesFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID * ppvOut)
{
- LPSHELLVIEW pShellView;
+ CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppvOut);
- pShellView->Release();
}
}
TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
return hr;
}
+static BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
+{
+ IID *iid = _ILGetGUIDPointer(pidl);
+
+ TRACE("(%p)\n", pidl);
+
+ if (iid)
+ return IsEqualIID(iid, CLSID_ControlPanel);
+ return FALSE;
+}
+
/**************************************************************************
* CDrivesFolder::GetAttributesOf
*/
else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1))
{
pidl = ILCombine (pidlRoot, apidl[0]);
- pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl);
+ pObj = IExtractIconA_Constructor (pidl);
SHFree (pidl);
hr = S_OK;
}
else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1))
{
pidl = ILCombine (pidlRoot, apidl[0]);
- pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl);
+ pObj = IExtractIconW_Constructor (pidl);
SHFree (pidl);
hr = S_OK;
}
else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1))
{
- hr = this->QueryInterface(IID_IDropTarget,
- (LPVOID *) &pObj);
+ IDropTarget * pDt = NULL;
+ hr = this->QueryInterface(IID_PPV_ARG(IDropTarget, &pDt));
+ pObj = pDt;
}
else if ((IsEqualIID(riid, IID_IShellLinkW) ||
IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1))
clsid = _ILGetGUIDPointer (pidl);
if (clsid)
{
- if (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)
+ if (GET_SHGDN_FOR (dwFlags) == SHGDN_FORPARSING)
{
static const WCHAR clsidW[] = L"CLSID\\";
static const WCHAR shellfolderW[] = L"\\shellfolder";