2025-11-28 00:35:46 +09:00

174 lines
5.3 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:
// SetupUI.cpp
//
// Abstract:
// Implementation for the setup UI object that displays UI when the user
// chooses to activate a device's partnership.
//
//////////////////////////////////////////////////////////////////////////////
#include "Pch.h"
#include "SetupUI.h"
#include "MyDeviceSyncHandler.h"
#include "Resources.h"
//////////////////////////////////////////////////////////////////////////////
// class CMyDeviceSetupUI
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
//
// Description:
// Create an instance of the setup UI class.
//
// Parameters:
// punkOuter - Outer IUnknown for aggregation.
// riid - ID of interface to return pointer to.
// pDeviceInfo - Info about the device to create the handler for.
// ppv - Interface pointer.
//
// Return Values:
// S_OK - Operation completed successfully.
// E_OUTOFMEMORY - Error allocating the object.
// Other HRESULTs - Error querying for requested interface.
//
//----------------------------------------------------------------------------
HRESULT CMyDeviceSetupUI_CreateInstance(__in CMyDeviceSyncHandler *pSyncHandler, __in REFIID riid, __deref_out void **ppv)
{
*ppv = NULL;
HRESULT hr = E_OUTOFMEMORY;
CMyDeviceSetupUI *pSetupUI = new CMyDeviceSetupUI(pSyncHandler);
if (pSetupUI != NULL)
{
hr = pSetupUI->QueryInterface(riid, ppv);
pSetupUI->Release();
}
return hr;
} //*** CMyDeviceSetupUI_CreateInstance
//----------------------------------------------------------------------------
//
// Description:
// Constructor.
//
// Parameters:
// pSyncHandler - Handler being setup.
//
//----------------------------------------------------------------------------
CMyDeviceSetupUI::CMyDeviceSetupUI(__in CMyDeviceSyncHandler *pSyncHandler)
:
_cRef(1),
_pSyncHandler(pSyncHandler)
{
DllAddRef();
_pSyncHandler->AddRef();
} //*** CMyDeviceSetupUI::CMyDeviceSetupUI
//----------------------------------------------------------------------------
//
// Description:
// Destructor.
//
//----------------------------------------------------------------------------
CMyDeviceSetupUI::~CMyDeviceSetupUI()
{
if (_pSyncHandler != NULL)
{
_pSyncHandler->Release();
}
DllRelease();
} //*** destructor CMyDeviceSetupUI::~CMyDeviceSetupUI
//----------------------------------------------------------------------------
// IUnknown (CMyDeviceSetupUI)
//----------------------------------------------------------------------------
STDMETHODIMP CMyDeviceSetupUI::QueryInterface(__in REFIID riid, __deref_out void **ppv)
{
static const QITAB qit[] =
{
QITABENT(CMyDeviceSetupUI, ISyncMgrUIOperation),
{ 0 },
};
return QISearch(this, qit, riid, ppv);
} //*** CMyDeviceSetupUI::QueryInterface
//----------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CMyDeviceSetupUI::Release()
{
ULONG cRef = InterlockedDecrement(&_cRef);
if (cRef == 0)
{
delete this;
}
return cRef;
} //*** CMyDeviceSetupUI::Release
//----------------------------------------------------------------------------
// ISyncMgrUIOperation (CMyDeviceSetupUI)
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//
// Description:
// Called by Sync Center to display UI to allow the user to setup the
// sync partnership.
//
// Implements: ISyncMgrUIOperation
//
// Parameters:
// hwndOwner - Owner window to host the UI on.
//
// Return Values:
// S_OK - Operation completed successfully.
// Failure HRESULT - Operation failed.
//
//----------------------------------------------------------------------------
STDMETHODIMP CMyDeviceSetupUI::Run(__in HWND hwndOwner)
{
LPWSTR pszDeviceName = NULL;
HRESULT hr = _pSyncHandler->GetName(&pszDeviceName);
if (SUCCEEDED(hr))
{
LPWSTR pszTitle = NULL;
hr = FormatString(g_hmodThisDll, IDS_SETUP_TITLE, &pszTitle);
if (SUCCEEDED(hr))
{
LPWSTR pszQuestion = NULL;
hr = FormatString(g_hmodThisDll, IDS_SETUP_QUESTION, &pszQuestion, pszDeviceName);
if (SUCCEEDED(hr))
{
int nResult = MessageBoxW(hwndOwner, pszQuestion, pszTitle, (MB_YESNO | MB_ICONQUESTION));
if (nResult != IDYES)
{
hr = E_ABORT;
}
LocalFree(pszQuestion);
}
LocalFree(pszTitle);
} // if: title string loaded successfully
CoTaskMemFree(pszDeviceName);
} // if: device name retrieved from the handler successfully
return hr;
} //*** CMyDeviceSetupUI::Run