windows-nt/Source/XPSP1/NT/shell/osshell/lmui/ntshrui/shrpage.hxx
2020-09-26 16:20:57 +08:00

428 lines
7.6 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1995 - 1995.
//
// File: shrpage.hxx
//
// Contents: "Sharing" shell property page extension
//
// History: 6-Apr-95 BruceFo Created
// 12-Jul-00 JonN fixed 140878, MSG_MULTIDEL debounce
// 06-Oct-00 jeffreys Split CShareBase out of CSharingPropertyPage
//
//--------------------------------------------------------------------------
#ifndef __SHRPAGE_HXX__
#define __SHRPAGE_HXX__
class CShareInfo;
void _MyShow( HWND hwndParent, INT idControl, BOOL fShow );
class CShareBase : public IOleWindow
{
DECLARE_SIG;
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
STDMETHODIMP_(ULONG) AddRef(void) ;
STDMETHODIMP_(ULONG) Release(void);
// IOleWindow
STDMETHODIMP GetWindow(HWND *phwnd);
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
//
// Page callback function for delete
//
static
UINT CALLBACK
PageCallback(
IN HWND hwnd,
IN UINT uMsg,
IN LPPROPSHEETPAGE ppsp
);
//
// Main page dialog procedure: static
//
static
INT_PTR CALLBACK
DlgProcPage(
HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam
);
//
// constructor, destructor, 2nd phase constructor
//
CShareBase(
IN PWSTR pszPath,
IN BOOL bDialog // called as a dialog, not a property page?
);
virtual ~CShareBase();
virtual HRESULT
InitInstance(
VOID
);
protected:
//
// Main page dialog procedure: non-static
//
virtual BOOL
_PageProc(
IN HWND hWnd,
IN UINT msg,
IN WPARAM wParam,
IN LPARAM lParam
);
//
// Window messages and notifications
//
virtual BOOL
_OnInitDialog(
IN HWND hwnd,
IN HWND hwndFocus,
IN LPARAM lInitParam
)
{
return TRUE;
}
virtual BOOL
_OnCommand(
IN HWND hwnd,
IN WORD wNotifyCode,
IN WORD wID,
IN HWND hwndCtl
);
virtual BOOL
_OnNotify(
IN HWND hwnd,
IN int idCtrl,
IN LPNMHDR phdr
);
virtual BOOL
_OnPropertySheetNotify(
IN HWND hwnd,
IN LPNMHDR phdr
);
virtual BOOL
_OnHelp(
IN HWND hwnd,
IN LPHELPINFO lphi
)
{
return FALSE;
}
virtual BOOL
_OnContextMenu(
IN HWND hwnd,
IN HWND hwndCtl,
IN int xPos,
IN int yPos
)
{
return FALSE;
}
//
// Other helper methods
//
virtual BOOL
_ValidatePage(
IN HWND hwnd
)
{
return TRUE;
}
virtual BOOL
_DoApply(
IN HWND hwnd,
IN BOOL bClose
);
virtual BOOL
_DoCancel(
IN HWND hwnd
);
VOID
_MarkPageDirty(
VOID
);
HRESULT
_ConstructShareList(
VOID
);
HRESULT
_ConstructNewShareInfo(
VOID
);
HWND
_GetFrameWindow(
VOID
)
{
return GetParent(_hwndPage);
}
BOOL
_ValidateNewShareName(
VOID
);
VOID
_CommitShares(
IN BOOL bNotShared
);
//
// Protected class variables
//
LONG _cRef;
PWSTR _pszPath;
HWND _hwndPage; // HWND to the property page
BOOL _bDialog; // called as a dialog, not a property page?
BOOL _bDirty; // Dirty flag: anything changed?
// JonN 7/12/00 140878
// I changed this from BOOL to ULONG, and started accessing it with
// increment/decrement rather than set, to prevent it from being
// cleared prematurely.
ULONG _fInitializingPage; // JonN 7/11/00 140878
BOOL _bNewShare;
CShareInfo* _pInfoList; // doubly-linked circular w/dummy head node
CShareInfo* _pReplaceList; // list of shares to delete: share names replaced with new shares.
CShareInfo* _pCurInfo;
ULONG _cShares; // count of shares, not incl. removed shares
};
class CSharingPropertyPage : public CShareBase
{
DECLARE_SIG;
public:
static
LRESULT CALLBACK
SizeWndProc(
IN HWND hwnd,
IN UINT wMsg,
IN WPARAM wParam,
IN LPARAM lParam
);
//
// constructor, destructor
//
CSharingPropertyPage(
IN PWSTR pszPath,
IN BOOL bDialog // called as a dialog, not a property page?
);
~CSharingPropertyPage();
private:
// Does the operating system support caching on this share?
// This method initializes _bIsCachingSupported, if it is not already true
bool
IsCachingSupported(
VOID
);
//
// Main page dialog procedure: non-static
//
virtual BOOL
_PageProc(
IN HWND hWnd,
IN UINT msg,
IN WPARAM wParam,
IN LPARAM lParam
);
//
// Window messages and notifications
//
virtual BOOL
_OnInitDialog(
IN HWND hwnd,
IN HWND hwndFocus,
IN LPARAM lInitParam
);
virtual BOOL
_OnCommand(
IN HWND hwnd,
IN WORD wNotifyCode,
IN WORD wID,
IN HWND hwndCtl
);
virtual BOOL
_OnHelp(
IN HWND hwnd,
IN LPHELPINFO lphi
);
virtual BOOL
_OnContextMenu(
IN HWND hwnd,
IN HWND hwndCtl,
IN int xPos,
IN int yPos
);
BOOL
_OnPermissions(
IN HWND hwnd
);
BOOL
_OnRemove(
IN HWND hwnd
);
BOOL
_OnNewShare(
IN HWND hwnd
);
BOOL
_OnCaching(
IN HWND hwnd
);
//
// Other helper methods
//
VOID
_InitializeControls(
IN HWND hwnd
);
VOID
_SetControlsToDefaults(
IN HWND hwnd
);
VOID
_SetFieldsFromCurrent(
IN HWND hwnd
);
VOID
_CacheMaxUses(
IN HWND hwnd
);
VOID
_HideControls(
IN HWND hwnd,
IN int cShares
);
VOID
_EnableControls(
IN HWND hwnd,
IN BOOL bEnable
);
BOOL
_ReadControls(
IN HWND hwnd
);
VOID
_SetControlsFromData(
IN HWND hwnd,
IN PWSTR pszPreferredSelection
);
virtual BOOL
_ValidatePage(
IN HWND hwnd
);
virtual BOOL
_DoApply(
IN HWND hwnd,
IN BOOL bClose
);
virtual BOOL
_DoCancel(
IN HWND hwnd
);
VOID
_MarkItemDirty(
VOID
);
#if DBG == 1
VOID
Dump(
IN PWSTR pszCaption
);
#endif // DBG == 1
//
// Private class variables
//
// JonN 7/12/00 140878
// This is the ID of the radio button last selected,
// so that we can "debounce" the MSG_MULTIDEL dialog.
WORD _wIDSelected; // JonN 7/12/00 140878
BOOL _bItemDirty; // Dirty flag: this item changed
BOOL _bShareNameChanged;
BOOL _bCommentChanged;
BOOL _bUserLimitChanged;
WORD _wMaxUsers;
WNDPROC _pfnAllowProc;
bool _bIsCachingSupported; // Does the operating system support caching on this share?
};
#endif // __SHRPAGE_HXX__