Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "shellprv.h"
#include "filetype.h"
#include "ftprop.h"
#include "ids.h"
HRESULT CreateFileTypePage(HPROPSHEETPAGE *phpsp) { *phpsp = NULL;
HRESULT hr; CFTPropDlg* pPropDlg = new CFTPropDlg(); if (pPropDlg) { PROPSHEETPAGE psp;
psp.dwSize = sizeof(psp); psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK; psp.hInstance = g_hinst; psp.pfnCallback = CFTDlg::BaseDlgPropSheetCallback; psp.pszTemplate = MAKEINTRESOURCE(DLG_FILETYPEOPTIONS); psp.pfnDlgProc = CFTDlg::BaseDlgWndProc; psp.lParam = (LPARAM)pPropDlg;
*phpsp = CreatePropertySheetPage(&psp); if (*phpsp) { pPropDlg->AddRef(); hr = S_OK; } else { hr = E_OUTOFMEMORY; } pPropDlg->Release(); } else { hr = E_OUTOFMEMORY; } return hr; }
class CFileTypes : public IShellPropSheetExt { public: CFileTypes() : _cRef(1) {}
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// IShellPropSheetExt
STDMETHODIMP AddPages(LPFNADDPROPSHEETPAGE pAddPageProc, LPARAM lParam); STDMETHODIMP ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pReplacePageFunc, LPARAM lParam);
private: LONG _cRef; };
STDMETHODIMP CFileTypes::QueryInterface(REFIID riid, void **ppv) { static const QITAB qit[] = { QITABENT(CFileTypes, IShellPropSheetExt), // IID_IShellPropSheetExt
{ 0 }, }; return QISearch(this, qit, riid, ppv); }
STDMETHODIMP_(ULONG) CFileTypes::AddRef() { return InterlockedIncrement(&_cRef); }
STDMETHODIMP_(ULONG) CFileTypes::Release() { ASSERT( 0 != _cRef ); ULONG cRef = InterlockedDecrement(&_cRef); if ( 0 == cRef ) { delete this; } return cRef; }
// IShellPropSheetExt::AddPages
STDMETHODIMP CFileTypes::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) { HPROPSHEETPAGE hpsp; // Make sure the FileIconTable is init properly. If brought in
// by inetcpl we need to set this true...
FileIconInit(TRUE); // We need to run the unicode version on NT, to avoid all bugs
// that occur with the ANSI version (due to unicode-to-ansi
// conversions of file names).
HRESULT hr = CreateFileTypePage(&hpsp); if (SUCCEEDED(hr) && !pfnAddPage(hpsp, lParam)) { DestroyPropertySheetPage(hpsp); hr = E_FAIL; } return hr; }
// IShellPropSheetExt::ReplacePage
STDMETHODIMP CFileTypes::ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplaceWith, LPARAM lParam) { HRESULT hr = E_NOTIMPL;
if (EXPPS_FILETYPES == uPageID) { HPROPSHEETPAGE hpsp; // We need to run the unicode version on NT, to avoid all bugs
// that occur with the ANSI version (due to unicode-to-ansi
// conversions of file names).
hr = CreateFileTypePage(&hpsp); if (SUCCEEDED(hr) && !pfnReplaceWith(hpsp, lParam)) { hr = E_FAIL; } } return hr; }
STDAPI CFileTypes_CreateInstance(IUnknown* punkOuter, REFIID riid, void **ppv) { HRESULT hr; CFileTypes * pft = new CFileTypes; if (pft) { hr = pft->QueryInterface(riid, ppv); pft->Release(); } else { *ppv = NULL; hr = E_OUTOFMEMORY; } return hr; }
|