235 lines
5.4 KiB
C++
235 lines
5.4 KiB
C++
//---------------------------------------------------------------------------
|
|
//
|
|
// File: PROPSEXT.CPP
|
|
//
|
|
// Implementation of the CPropSheetExt object.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include "precomp.hxx"
|
|
#pragma hdrstop
|
|
|
|
#include "..\common\propsext.h"
|
|
#include "EffectsBasePg.h"
|
|
#include <cowsite.h> // for CObjectWithSite
|
|
|
|
|
|
#define PROPSHEET_CLASS CEffectsBasePage
|
|
class CPropSheetExt;
|
|
|
|
|
|
HRESULT CEffectsPage_CreateInstance(OUT IAdvancedDialog ** ppAdvDialog);
|
|
|
|
class CEffectsPage : public CObjectWithSite
|
|
, public IAdvancedPropPage
|
|
, public IShellExtInit
|
|
{
|
|
public:
|
|
//////////////////////////////////////////////////////
|
|
// Public Interfaces
|
|
//////////////////////////////////////////////////////
|
|
// *** IUnknown ***
|
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
|
|
virtual STDMETHODIMP_(ULONG) AddRef(void);
|
|
virtual STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
// *** IShellExtInit ***
|
|
virtual STDMETHODIMP Initialize(IN LPCITEMIDLIST pidlFolder, IDataObject * pDataObj, IN HKEY hkeyProgID) {return E_NOTIMPL;}
|
|
|
|
// *** IShellPropSheetExt ***
|
|
virtual STDMETHODIMP AddPages(IN LPFNSVADDPROPSHEETPAGE pfnAddPage, IN LPARAM lParam);
|
|
virtual STDMETHODIMP ReplacePage(IN EXPPS uPageID, IN LPFNSVADDPROPSHEETPAGE pfnReplaceWith, IN LPARAM lParam) {return E_NOTIMPL;}
|
|
|
|
// *** IAdvancedPropPage ***
|
|
virtual STDMETHODIMP IsDirty(IN BOOL * pIsDirty);
|
|
virtual STDMETHODIMP OnClose(IN BOOL fCancelled, IN IBasePropPage * pAdvPage);
|
|
|
|
|
|
private:
|
|
CEffectsPage(void);
|
|
virtual ~CEffectsPage(void);
|
|
|
|
// Private Member Variables
|
|
int m_cRef;
|
|
BOOL m_fDirty;
|
|
EFFECTS_STATE m_effectsState;
|
|
|
|
// Private Member Functions
|
|
HRESULT _OnInit(HWND hDlg);
|
|
HRESULT _OnLoad(HWND hDlg); // Load the state from the base page.
|
|
HRESULT _OnApply(HWND hDlg); // The user clicked apply
|
|
HRESULT _OnSave(HWND hDlg); // Save the state to the base page.
|
|
|
|
INT_PTR _PropertySheetDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam);
|
|
friend INT_PTR CALLBACK PropertySheetDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
friend HRESULT CEffectsPage_CreateInstance(OUT IAdvancedDialog ** ppAdvDialog);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//===========================
|
|
// *** Class Internals & Helpers ***
|
|
//===========================
|
|
|
|
|
|
|
|
|
|
|
|
//===========================
|
|
// *** IAdvancedPropPage Interface ***
|
|
//===========================
|
|
HRESULT CEffectsPage::IsDirty(IN BOOL * pIsDirty)
|
|
{
|
|
HRESULT hr = E_INVALIDARG;
|
|
|
|
if (pIsDirty)
|
|
{
|
|
*pIsDirty = m_fDirty;
|
|
hr = S_OK;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT CEffectsPage::OnClose(IN BOOL fCancelled, IN IBasePropPage * pAdvPage)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
// TODO: Merger State as appropriate
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
|
|
#define MAX_PROPSHEET_TITLE 50
|
|
|
|
//===========================
|
|
// *** IShellPropSheetExt Interface ***
|
|
//===========================
|
|
HRESULT CEffectsPage::AddPages(IN LPFNSVADDPROPSHEETPAGE pfnAddPage, IN LPARAM lParam)
|
|
{
|
|
HRESULT hr = E_INVALIDARG;
|
|
PROPSHEETPAGE psp = {0};
|
|
TCHAR szTitle[MAX_PROPSHEET_TITLE];
|
|
|
|
LoadString(g_hInst, IDS_PAGE_TITLE, szTitle, ARRAYSIZE(szTitle));
|
|
psp.dwSize = sizeof(psp);
|
|
psp.hInstance = g_hInst;
|
|
psp.dwFlags = (PSP_USETITLE | PSP_USECALLBACK);
|
|
psp.lParam = (LPARAM) this;
|
|
|
|
psp.pszTemplate = MAKEINTRESOURCE(PROP_SHEET_DLG);
|
|
psp.pfnDlgProc = PropertySheetDlgProc;
|
|
psp.pfnCallback = PropertySheetCallback;
|
|
psp.pszTitle = szTitle;
|
|
|
|
HPROPSHEETPAGE hpsp = CreatePropertySheetPage(&psp);
|
|
if (hpsp)
|
|
{
|
|
if (pfnAddPage(hpsp, lParam))
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
else
|
|
{
|
|
DestroyPropertySheetPage(hpsp);
|
|
hr = E_FAIL;
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
//===========================
|
|
// *** IUnknown Interface ***
|
|
//===========================
|
|
ULONG CEffectsPage::AddRef()
|
|
{
|
|
m_cRef++;
|
|
return m_cRef;
|
|
}
|
|
|
|
|
|
ULONG CEffectsPage::Release()
|
|
{
|
|
Assert(m_cRef > 0);
|
|
m_cRef--;
|
|
|
|
if (m_cRef > 0)
|
|
return m_cRef;
|
|
|
|
delete this;
|
|
return 0;
|
|
}
|
|
|
|
|
|
HRESULT CEffectsPage::QueryInterface(REFIID riid, void **ppvObj)
|
|
{
|
|
HRESULT hr = E_NOINTERFACE;
|
|
|
|
static const QITAB qit[] = {
|
|
QITABENT(CEffectsPage, IObjectWithSite),
|
|
QITABENT(CEffectsPage, IAdvancedPropPage),
|
|
QITABENTMULTI(CEffectsPage, IShellPropSheetExt, IAdvancedPropPage),
|
|
{ 0 },
|
|
};
|
|
|
|
return QISearch(this, qit, riid, ppvObj);
|
|
}
|
|
|
|
|
|
|
|
|
|
//===========================
|
|
// *** Class Methods ***
|
|
//===========================
|
|
CEffectsPage::CEffectsPage() : m_cRef(1)
|
|
{
|
|
// This needs to be allocated in Zero Inited Memory.
|
|
// Assert that all Member Variables are inited to Zero.
|
|
m_fDirty = FALSE;
|
|
}
|
|
|
|
|
|
CEffectsPage::~CEffectsPage()
|
|
{
|
|
}
|
|
|
|
|
|
HRESULT CEffectsPage_CreateInstance(OUT IAdvancedDialog ** ppAdvDialog)
|
|
{
|
|
HRESULT hr = E_INVALIDARG;
|
|
|
|
if (ppAdvDialog)
|
|
{
|
|
CEffectsPage * pThis = new CEffectsPage();
|
|
|
|
if (pThis)
|
|
{
|
|
hr = pThis->QueryInterface(IID_PPV_ARG(IAdvancedDialog, ppAdvDialog));
|
|
pThis->Release();
|
|
}
|
|
else
|
|
{
|
|
*ppAdvDialog = NULL;
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#include "..\common\propsext.cpp"
|