176 lines
4.6 KiB
C++
176 lines
4.6 KiB
C++
/*++
|
|
|
|
Copyright (c) 1994-2000 Microsoft Corporation
|
|
|
|
Module Name :
|
|
W3PropPage.h
|
|
|
|
Abstract:
|
|
IIS Shell extension PropertyPage class definition
|
|
|
|
Author:
|
|
Sergei Antonov (sergeia)
|
|
|
|
Project:
|
|
Internet Services Manager
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __W3PROPPAGE_H_
|
|
#define __W3PROPPAGE_H_
|
|
|
|
#include "resource.h" // main symbols
|
|
|
|
class CPropShellExt;
|
|
class CMetaEnumerator;
|
|
|
|
#define LOCAL_KEY ((CComAuthInfo *)NULL)
|
|
|
|
template <class T, bool bAutoDelete = true>
|
|
class CShellExtPropertyPageImpl : public CDialogImplBase
|
|
{
|
|
public:
|
|
PROPSHEETPAGE m_psp;
|
|
|
|
operator PROPSHEETPAGE*() { return &m_psp; }
|
|
|
|
// Construction
|
|
CShellExtPropertyPageImpl(LPCTSTR lpszTitle = NULL)
|
|
{
|
|
// initialize PROPSHEETPAGE struct
|
|
memset(&m_psp, 0, sizeof(PROPSHEETPAGE));
|
|
m_psp.dwSize = sizeof(PROPSHEETPAGE);
|
|
m_psp.dwFlags = PSP_USECALLBACK | PSP_USEREFPARENT | PSP_DEFAULT;
|
|
m_psp.hInstance = _Module.GetResourceInstance();
|
|
m_psp.pszTemplate = MAKEINTRESOURCE(T::IDD);
|
|
m_psp.pfnDlgProc = T::StartDialogProc;
|
|
m_psp.pfnCallback = T::PropPageCallback;
|
|
m_psp.pcRefParent = reinterpret_cast<UINT *>(&_Module.m_nLockCnt);
|
|
m_psp.lParam = reinterpret_cast<LPARAM>(this);
|
|
|
|
if(lpszTitle != NULL)
|
|
{
|
|
m_psp.pszTitle = lpszTitle;
|
|
m_psp.dwFlags |= PSP_USETITLE;
|
|
}
|
|
}
|
|
|
|
static UINT CALLBACK PropPageCallback(HWND hWnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
|
|
{
|
|
ATLASSERT(hWnd == NULL);
|
|
if(uMsg == PSPCB_CREATE || uMsg == PSPCB_ADDREF)
|
|
{
|
|
CDialogImplBase * pPage = (CDialogImplBase *)ppsp->lParam;
|
|
_Module.AddCreateWndData(&pPage->m_thunk.cd, pPage);
|
|
}
|
|
if (bAutoDelete && uMsg == PSPCB_RELEASE)
|
|
{
|
|
T * pPage = (T *)ppsp->lParam;
|
|
delete pPage;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
HPROPSHEETPAGE Create()
|
|
{
|
|
return ::CreatePropertySheetPage(&m_psp);
|
|
}
|
|
|
|
BOOL EndDialog(int)
|
|
{
|
|
// do nothing here, calling ::EndDialog will close the whole sheet
|
|
ATLASSERT(FALSE);
|
|
return FALSE;
|
|
}
|
|
};
|
|
|
|
class CComboBoxExch : public CWindowImpl<CComboBoxExch, CComboBox>
|
|
{
|
|
public:
|
|
BEGIN_MSG_MAP_EX(CComboBoxExch)
|
|
END_MSG_MAP()
|
|
};
|
|
|
|
class CListBoxExch : public CWindowImpl<CListBoxExch, CListBox>
|
|
{
|
|
public:
|
|
BEGIN_MSG_MAP_EX(CListBoxExch)
|
|
END_MSG_MAP()
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CW3PropPage
|
|
|
|
// We cannot make this class autodelete -- we are storing instance of this page
|
|
// inside of shell extension module
|
|
//
|
|
class CW3PropPage :
|
|
public CShellExtPropertyPageImpl<CW3PropPage, false>,
|
|
public CWinDataExchange<CW3PropPage>
|
|
{
|
|
public:
|
|
CW3PropPage() :
|
|
CShellExtPropertyPageImpl<CW3PropPage, false>(MAKEINTRESOURCE(IDS_PAGE_TITLE)),
|
|
m_pParentExt(NULL)
|
|
{
|
|
}
|
|
|
|
~CW3PropPage()
|
|
{
|
|
}
|
|
|
|
enum { IDD = IDD_W3PROPERTY_PAGE };
|
|
|
|
BEGIN_MSG_MAP_EX(CW3PropPage)
|
|
MSG_WM_INITDIALOG(OnInitDialog)
|
|
MSG_WM_DESTROY(OnDestroy)
|
|
COMMAND_ID_HANDLER_EX(IDC_ADD, OnAdd)
|
|
COMMAND_ID_HANDLER_EX(IDC_REMOVE, OnRemove)
|
|
COMMAND_ID_HANDLER_EX(IDC_EDIT, OnEdit)
|
|
COMMAND_HANDLER_EX(IDC_COMBO_SERVER, CBN_SELCHANGE, OnServerChange)
|
|
COMMAND_HANDLER_EX(IDC_SHARE_OFF, BN_CLICKED, OnShareYesNo)
|
|
COMMAND_HANDLER_EX(IDC_SHARE_ON, BN_CLICKED, OnShareYesNo)
|
|
COMMAND_HANDLER_EX(IDC_LIST, LBN_SELCHANGE, OnVDirChange)
|
|
COMMAND_HANDLER_EX(IDC_LIST, LBN_DBLCLK, OnEdit)
|
|
END_MSG_MAP()
|
|
// Handler prototypes:
|
|
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
|
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
|
|
|
|
LRESULT OnInitDialog(HWND hDlg, LPARAM lParam);
|
|
void OnDestroy();
|
|
void OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl);
|
|
void OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl);
|
|
void OnEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl);
|
|
void OnServerChange(WORD wNotifyCode, WORD wID, HWND hWndCtl);
|
|
void OnShareYesNo(WORD wNotifyCode, WORD wID, HWND hWndCtl);
|
|
void OnVDirChange(WORD wNotifyCode, WORD wID, HWND hWndCtl);
|
|
|
|
BEGIN_DDX_MAP(CW3PropPage)
|
|
DDX_CONTROL(IDC_COMBO_SERVER, m_servers_list)
|
|
DDX_CONTROL(IDC_LIST, m_share_list)
|
|
END_DDX_MAP()
|
|
|
|
void SetParentExt(CPropShellExt * pExt)
|
|
{
|
|
m_pParentExt = pExt;
|
|
}
|
|
|
|
protected:
|
|
void RecurseVDirs(CMetaEnumerator& en, LPCTSTR path);
|
|
void EnableOnShare();
|
|
void EnableEditRemove();
|
|
|
|
protected:
|
|
CComboBoxExch m_servers_list;
|
|
CListBoxExch m_share_list;
|
|
BOOL m_ShareThis;
|
|
CPropShellExt * m_pParentExt;
|
|
};
|
|
|
|
#endif //__W3PROPPAGE_H_
|