windows-nt/Source/XPSP1/NT/printscan/fax/admin/fspext/fsp.h
2020-09-26 16:20:57 +08:00

159 lines
3.9 KiB
C++

#ifndef __FSP_H_
#define __FSP_H_
#include "resource.h"
#include "atlsnap.h"
#include <shlobj.h>
#define LOGKEY TEXT("Software\\Microsoft\\Fax\\Device Providers\\Microsoft Modem Device Provider")
#define LOGLEVEL TEXT("ModemLogLevel")
#define LOGLOCATION TEXT("ModemLogLocation")
#define LOGGING_NONE 0x0
#define LOGGING_ERRORS 0x1
#define LOGGING_ALL 0x100
class CFSPPage : public CPropertyPageImpl<CFSPPage>
{
private:
BOOL m_bChanged;
DWORD m_LoggingLevel;
LPWSTR m_LoggingDirectory;
HKEY m_LogKey;
public :
CFSPPage(TCHAR* pTitle = NULL) : CPropertyPageImpl<CFSPPage> (pTitle)
{
m_bChanged = FALSE;
m_LogKey = OpenRegistryKey(HKEY_LOCAL_MACHINE,LOGKEY,FALSE,0);
if (!m_LogKey) {
m_LoggingLevel = 0;
m_LoggingDirectory = NULL;
} else {
m_LoggingLevel = GetRegistryDword(m_LogKey,LOGLEVEL);
m_LoggingDirectory = GetRegistryString(m_LogKey,LOGLOCATION,TEXT(""));
}
}
~CFSPPage() {
if (m_LoggingDirectory) {
MemFree(m_LoggingDirectory);
}
if (m_LogKey) {
RegCloseKey(m_LogKey);
}
}
enum { IDD = IDD_FSP };
BEGIN_MSG_MAP(CFSPPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDC_LOG_NONE, DisableLogging);
COMMAND_ID_HANDLER(IDC_LOG_ERRORS, EnableLogging);
COMMAND_ID_HANDLER(IDC_LOG_ALL, EnableLogging);
COMMAND_ID_HANDLER(IDC_LOGBROWSE, OnBrowseDir);
CHAIN_MSG_MAP(CPropertyPageImpl<CFSPPage>)
END_MSG_MAP()
LRESULT DisableLogging(INT code, INT id, HWND hwnd, BOOL& bHandled);
LRESULT EnableLogging(INT code, INT id, HWND hwnd, BOOL& bHandled);
LRESULT OnBrowseDir(INT code, INT id, HWND hwnd, BOOL& bHandled);
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
VOID SetChangedFlag( BOOL Flag );
BOOL OnApply();
private:
BOOL BrowseForDirectory();
BOOL ValidateLogLocation();
};
class CFSPData : public CSnapInDataInterface< CFSPData, TRUE >
{
static const GUID* m_NODETYPE;
static const TCHAR* m_SZNODETYPE;
static const TCHAR* m_SZDISPLAY_NAME;
static const CLSID* m_SNAPIN_CLASSID;
public:
static CComPtr<IControlbar> m_spControlBar;
public:
CFSPData()
{
}
~CFSPData()
{
}
STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider,
long handle, IUnknown* pUnk)
{
TCHAR Title[MAX_TITLE_LEN];
LoadString(_Module.GetModuleInstance(),IDS_TITLE,Title,sizeof(Title));
CFSPPage* pPage = new CFSPPage(Title);
lpProvider->AddPage(pPage->Create());
return S_OK;
}
STDMETHOD(QueryPagesFor)(void)
{
return S_OK;
}
void* GetNodeType()
{
return (void*)m_NODETYPE;
}
void* GetSZNodeType()
{
return (void*)m_SZNODETYPE;
}
void* GetDisplayName()
{
return (void*)m_SZDISPLAY_NAME;
}
void* GetSnapInCLSID()
{
return (void*)m_SNAPIN_CLASSID;
}
IDataObject* m_pDataObject;
BOOL InitDataClass(IDataObject* pDataObject)
{
m_pDataObject = pDataObject;
// The default code stores off the pointer to the Dataobject the class is wrapping
// at the time.
// Alternatively you could convert the dataobject to the internal format
// it represents and store that information
return TRUE;
}
};
class CFSP : public CSnapinObjectRootEx<CComSingleThreadModel>,
public IExtendPropertySheetImpl<CFSP>,
public CComCoClass<CFSP, &CLSID_FSP>
{
public:
EXTENSION_SNAPIN_DATACLASS(CFSPData)
BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP(CFSP)
EXTENSION_SNAPIN_NODEINFO_ENTRY(CFSPData)
END_EXTENSION_SNAPIN_NODEINFO_MAP()
BEGIN_COM_MAP(CFSP)
COM_INTERFACE_ENTRY(IExtendPropertySheet)
END_COM_MAP()
DECLARE_REGISTRY_RESOURCEID(IDR_FSP)
DECLARE_NOT_AGGREGATABLE(CFSP)
};
#endif