161 lines
4.5 KiB
C++
161 lines
4.5 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// Module Name:
|
|
// BrowseUI.cpp
|
|
//
|
|
// Abstract:
|
|
// Implementation for an object which implements ISyncMgrUIOperation. It
|
|
// opens explorer to a particular folder when the user browses on an
|
|
// item or partnership.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Pch.h"
|
|
#include "BrowseUI.h"
|
|
#include "Resources.h"
|
|
#include "Helpers.h"
|
|
#include <knownfolders.h> // for KNOWNFOLDERID
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// class CBrowseUI
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Description:
|
|
// Create an instance of the CBrowseUI class.
|
|
//
|
|
// Parameters:
|
|
// folderID - KNOWNFOLDERID of the folder to be viewed.
|
|
// riid - ID of interface to return pointer to.
|
|
// ppv - Interface pointer returned to caller.
|
|
//
|
|
// Return Values:
|
|
// S_OK - Operation completed successfully.
|
|
// E_OUTOFMEMORY - Insufficient memory.
|
|
// Other HRESULTs - Error querying for requested interface.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
HRESULT CBrowseUI_CreateInstance(__in KNOWNFOLDERID folderID, __in REFIID riid, __deref_out void **ppv)
|
|
{
|
|
*ppv = NULL;
|
|
|
|
HRESULT hr = E_OUTOFMEMORY;
|
|
CBrowseUI *pBrowseUI = new CBrowseUI(folderID);
|
|
if (pBrowseUI != NULL)
|
|
{
|
|
hr = pBrowseUI->QueryInterface(riid, ppv);
|
|
pBrowseUI->Release();
|
|
}
|
|
|
|
return hr;
|
|
|
|
} //*** CBrowseUI_CreateInstance
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Description:
|
|
// Constructor.
|
|
//
|
|
// Parameters:
|
|
// folderID - KNOWNFOLDERID of the folder to be viewed.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
CBrowseUI::CBrowseUI(__in KNOWNFOLDERID folderID)
|
|
:
|
|
_cRef(1),
|
|
_folderID(folderID)
|
|
{
|
|
DllAddRef();
|
|
|
|
} //*** CBrowseUI::CBrowseUI
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Description:
|
|
// Destructor.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
CBrowseUI::~CBrowseUI()
|
|
{
|
|
DllRelease();
|
|
|
|
} //*** Destructor CBrowseUI::~CBrowseUI
|
|
|
|
//----------------------------------------------------------------------------
|
|
// IUnknown (CBrowseUI)
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CBrowseUI::QueryInterface(__in REFIID riid, __deref_out void **ppv)
|
|
{
|
|
static const QITAB qit[] =
|
|
{
|
|
QITABENT(CBrowseUI, ISyncMgrUIOperation),
|
|
{ 0 },
|
|
};
|
|
|
|
return QISearch(this, qit, riid, ppv);
|
|
|
|
} //*** CBrowseUI::QueryInterface
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP_(ULONG) CBrowseUI::Release()
|
|
{
|
|
ULONG cRef = InterlockedDecrement(&_cRef);
|
|
if (cRef == 0)
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
return cRef;
|
|
|
|
} //*** CBrowseUI::Release
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ISyncMgrUIOperation (CBrowseUI)
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CBrowseUI::Run(__in HWND hwndOwner)
|
|
{
|
|
return _BrowseInExplorer(hwndOwner);
|
|
|
|
} //*** CMyDeviceSetupUI::Run
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Description:
|
|
// Opens Explorer to a specified known folder.
|
|
//
|
|
// Parameters:
|
|
// cFolderID - KNOWNFOLDERID of the folder to open.
|
|
// hwndOwner - Handle to the owner window.
|
|
//
|
|
// Return Values:
|
|
// S_OK - Operation completed successfully
|
|
// Other HRESULTs - Operation failed
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
HRESULT CBrowseUI::_BrowseInExplorer(__in HWND hwndOwner)
|
|
{
|
|
LPWSTR pszPath = NULL;
|
|
HRESULT hr = SHGetKnownFolderPath(_folderID, 0, NULL, &pszPath);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
ShellExecuteW(hwndOwner, L"open", pszPath, NULL, NULL, SW_SHOWNORMAL);
|
|
|
|
CoTaskMemFree(pszPath);
|
|
}
|
|
|
|
return hr;
|
|
|
|
}//*** CBrowseUI::_BrowseInExplorer
|
|
|