|
|
/////////////////////////////////////////////////////////////////////////////
// FILE : C_Snapin.h (from Snapin.h) //
// //
// DESCRIPTION : Header file for //
// CSnapinPage //
// CSnapinData //
// CSnapinExtData //
// CSnapinComponent //
// CSnapin //
// CSnapinAbout //
// //
// AUTHOR : ATL Snapin class wizard //
// //
// HISTORY : //
// May 25 1998 adik Init. //
// Aug 24 1998 adik Use Comet version. //
// Sep 14 1998 yossg seperate common source to an included file //
// Oct 18 1998 adik Merged with new wizard version. //
// Jan 12 1999 adik Add ParentArrayInterfaceFromDataObject. //
// Mar 28 1999 adik Remove persistence support. //
// Mar 30 1999 adik Supporting ICometSnapinNode. //
// Apr 27 1999 adik Help support. //
// May 23 1999 adik Use ifndef _IN_NEMMCUTIL in few places. //
// Jun 10 1999 AvihaiL Fix warnings. //
// Jun 14 1999 roytal used UNREFERENCED_PARAMETER to fix build wrn //
// Jul 29 1999 adik Release extensions. //
// //
// Oct 13 1999 yossg Welcome to Fax Server //
// Dec 12 1999 yossg add CSnapin::Notify //
// Apr 14 2000 yossg Add support for primary snapin mode //
// Jun 25 2000 yossg Add stream and command line primary snapin //
// machine targeting. //
// //
// Copyright (C) 1998 - 2000 Microsoft Corporation All Rights Reserved //
/////////////////////////////////////////////////////////////////////////////
#ifndef C_SNAPIN_H_INCLUDED
#define C_SNAPIN_H_INCLUDED
#include <stdio.h>
//#include <ATLSnap.h>
#include "..\inc\atlsnap.h"
#include "cVerNum.h"
EXTERN_C const CLSID CLSID_Snapin; EXTERN_C const CLSID CLSID_SnapinAbout;
#define FXS_HINT_DELETE_ALL_RSLT_ITEMS -1
class CSnapin;
////////////////////////////////////////////////////////////////////
// CSnapinExtData
//
class CSnapinExtData : public CSnapInItemImpl<CSnapinExtData, TRUE> { public: static const GUID* m_NODETYPE; static const OLECHAR* m_SZNODETYPE; static const OLECHAR* m_SZDISPLAY_NAME; static const CLSID* m_SNAPIN_CLASSID;
CSnapin *m_pComponentData;
BEGIN_SNAPINCOMMAND_MAP(CSnapinExtData, FALSE) END_SNAPINCOMMAND_MAP()
SNAPINMENUID(IDR_SNAPIN_MENU)
BEGIN_SNAPINTOOLBARID_MAP(CSnapinExtData) // Create toolbar resources with button dimensions 16x16
// and add an entry to the MAP. You can add multiple toolbars
// SNAPINTOOLBARID_ENTRY(Toolbar ID)
END_SNAPINTOOLBARID_MAP()
CSnapinExtData() { memset(&m_scopeDataItem, 0, sizeof(SCOPEDATAITEM)); memset(&m_resultDataItem, 0, sizeof(RESULTDATAITEM)); }
~CSnapinExtData() { }
STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, IUnknown* pUnk, DATA_OBJECT_TYPES type);
STDMETHOD(QueryPagesFor)(DATA_OBJECT_TYPES type) { if (type == CCT_SCOPE || type == CCT_RESULT) return S_OK; return S_FALSE; }
IDataObject* m_pDataObject; virtual void InitDataClass(IDataObject* pDataObject, CSnapInItem* pDefault) { m_pDataObject = pDataObject; UNREFERENCED_PARAMETER(pDefault); // 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
}
CSnapInItem* GetExtNodeObject(IDataObject* pDataObject, CSnapInItem* pDefault);
}; // endclass CSnapinExtData
////////////////////////////////////////////////////////////////////
// CSnapinComponent
//
class CSnapinComponent : public CComObjectRootEx<CComSingleThreadModel>, public CSnapInObjectRoot<2, CSnapin>, public IExtendPropertySheetImpl<CSnapinComponent>, public IExtendContextMenuImpl<CSnapinComponent>, public IExtendControlbarImpl<CSnapinComponent>, public IComponentImpl<CSnapinComponent> //, public IExtendTaskPadImpl<CSnapinComponent>
{ public: BEGIN_COM_MAP(CSnapinComponent) COM_INTERFACE_ENTRY(IComponent) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendControlbar) // COM_INTERFACE_ENTRY(IExtendTaskPad)
END_COM_MAP()
public: // A pointer to the currently selected node used for refreshing views.
// When we need to update the view, we tell MMC to reselect this node.
CSnapInItem * m_pSelectedNode;
CSnapinComponent();
~CSnapinComponent();
// Handlers for notifications which we want to handle on a
// per-IComponent basis.
public: // We are overiding ATLsnap.h's IComponentImpl implementation of this
// in order to correctly handle messages which it is incorrectly
// ignoring (e.g. MMCN_COLUMN_CLICK and MMCN_SNAPINHELP)
STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param);
STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
protected: virtual HRESULT OnColumnClick(LPARAM arg, LPARAM param);
virtual HRESULT OnCutOrMove(LPARAM arg, LPARAM param);
virtual HRESULT OnSnapinHelp(LPARAM arg, LPARAM param);
virtual HRESULT OnViewChange(LPARAM arg, LPARAM param);
virtual HRESULT OnPropertyChange(LPARAM arg, LPARAM param);
// virtual HRESULT OnAddImages(LPARAM arg, LPARAM param);
public:
// Related to TaskPad implementation.
// We have to override this because the default implementation
// gives back the wrong answer when the cookie is NULL.
// NULL cookie means root node, and for our root node
// we want a taskpad.
// STDMETHOD(GetResultViewType)(long cookie,
// LPOLESTR *ppViewType,
// long *pViewOptions);
STDMETHOD(GetTitle)(LPOLESTR pszGroup, LPOLESTR *pszTitle);
STDMETHOD(GetBanner)(LPOLESTR pszGroup, LPOLESTR *pszBitmapResource); }; // endclass CSnapinComponent
class CFaxServerNode; ////////////////////////////////////////////////////////////////////
// CSnapin
//
class CSnapin : public CComObjectRootEx<CComSingleThreadModel>, public CSnapInObjectRoot<1, CSnapin>, public IComponentDataImpl<CSnapin, CSnapinComponent>, public IExtendPropertySheetImpl<CSnapin>, public IExtendContextMenuImpl<CSnapin>, public IExtendControlbarImpl<CSnapin>, public IPersistStream, public ISnapinHelp, public CComCoClass<CSnapin, &CLSID_Snapin> { public: CSnapin();
~CSnapin();
EXTENSION_SNAPIN_DATACLASS(CSnapinExtData)
BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP(CSnapin) EXTENSION_SNAPIN_NODEINFO_ENTRY(CSnapinExtData) END_EXTENSION_SNAPIN_NODEINFO_MAP()
CFaxServerNode* m_pPrimaryFaxServerNode;
BEGIN_COM_MAP(CSnapin) COM_INTERFACE_ENTRY(IComponentData) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendControlbar) COM_INTERFACE_ENTRY(ISnapinHelp) COM_INTERFACE_ENTRY(IPersistStream) END_COM_MAP()
DECLARE_REGISTRY_RESOURCEID(IDR_SNAPIN)
DECLARE_NOT_AGGREGATABLE(CSnapin)
STDMETHOD(GetClassID)(CLSID *pClassID) { ATLTRACE(_T("CSnapin::GetClassID")); ATLASSERT(pClassID);
*pClassID = CLSID_Snapin;
return S_OK; }
STDMETHOD(Initialize)(LPUNKNOWN pUnknown);
static void WINAPI ObjectMain(bool bStarting) { if (bStarting) CSnapInItem::Init(); } //
// ISnapinHelp Interface
//
STDMETHOD(GetHelpTopic)(LPOLESTR* lpCompiledHelpFile);
virtual WCHAR *GetHelpFile(); virtual WCHAR *GetHelpTopic();
//
// Override IComponentDataImpl's Notify
// for lpDataObject == NULL && event == MMCN_PROPERTY_CHANGE
//
STDMETHOD(Notify)( LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param);
//
// IPersistStream:
// These originally pure virtual functions
// must been defined here
//
STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream *pStm); STDMETHOD(Save)(IStream *pStm, BOOL /*fClearDirty*/); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize);
private:
CComBSTR m_bstrServerName; BOOL m_fAllowOverrideServerName;
}; // endclass CSnapin
////////////////////////////////////////////////////////////////////
// CSnapinAbout
//
class ATL_NO_VTABLE CSnapinAbout : public ISnapinAbout, public CComObjectRoot, public CComCoClass< CSnapinAbout, &CLSID_SnapinAbout> { public: DECLARE_REGISTRY(CSnapinAbout, _T("SnapinAbout.1"), _T("SnapinAbout.1"), IDS_SNAPIN_DESC, THREADFLAGS_BOTH);
BEGIN_COM_MAP(CSnapinAbout) COM_INTERFACE_ENTRY(ISnapinAbout) END_COM_MAP()
HBITMAP m_hSmallImage; HBITMAP m_hSmallImageOpen; HBITMAP m_hLargeImage;
CSnapinAbout(): m_hSmallImage(NULL), m_hSmallImageOpen(NULL), m_hLargeImage(NULL) { }
~CSnapinAbout() { if(m_hSmallImage) { DeleteObject(m_hSmallImage); }
if(m_hSmallImageOpen) { DeleteObject(m_hSmallImageOpen); }
if(m_hLargeImage) { DeleteObject(m_hLargeImage); } }
STDMETHOD(GetSnapinDescription)(LPOLESTR *lpDescription) { USES_CONVERSION; TCHAR szBuf[256]; if (::LoadString(_Module.GetResourceInstance(), IDS_SNAPIN_DESC, szBuf, 256) == 0) return E_FAIL;
*lpDescription = (LPOLESTR)CoTaskMemAlloc((lstrlen(szBuf) + 1) * sizeof(OLECHAR)); if (*lpDescription == NULL) return E_OUTOFMEMORY;
ocscpy(*lpDescription, T2OLE(szBuf));
return S_OK; }
STDMETHOD(GetProvider)(LPOLESTR *lpName) { USES_CONVERSION; WCHAR szBuf[256]; if (::LoadString(_Module.GetResourceInstance(), IDS_SNAPIN_PROVIDER, szBuf, 256) == 0) return E_FAIL;
*lpName = (LPOLESTR)CoTaskMemAlloc((lstrlen(szBuf) + 1) * sizeof(OLECHAR)); if (*lpName == NULL) return E_OUTOFMEMORY;
ocscpy(*lpName, T2OLE(szBuf));
return S_OK; }
STDMETHOD(GetSnapinVersion)(LPOLESTR *lpVersion) {
USES_CONVERSION; TCHAR szBuf[256]; TCHAR szFmt[200]; if (::LoadString(_Module.GetResourceInstance(), IDS_SNAPIN_VERSION, szFmt, 200) == 0) return E_FAIL; swprintf(szBuf, szFmt, rmj, rmm, rup); *lpVersion = (LPOLESTR)CoTaskMemAlloc((lstrlen(szBuf) + 1) * sizeof(OLECHAR)); if (*lpVersion == NULL) return E_OUTOFMEMORY;
ocscpy(*lpVersion, T2OLE(szBuf)); return S_OK; }
STDMETHOD(GetSnapinImage)(HICON *hAppIcon) { *hAppIcon = ::LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_ICON_FAXSERVER)); return S_OK; }
STDMETHOD(GetStaticFolderImage)(HBITMAP* hSmallImage, HBITMAP* hSmallImageOpen, HBITMAP* hLargeImage, COLORREF* cMask) { if(!hSmallImage || !hSmallImageOpen || !hLargeImage || !cMask) { return S_FALSE; }
HINSTANCE hInst = _Module.GetResourceInstance();
if(m_hSmallImage) { *hSmallImage = m_hSmallImage; } else { m_hSmallImage = *hSmallImage = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FAX_BITMAP_16)); }
if(m_hSmallImageOpen) { *hSmallImageOpen = m_hSmallImageOpen; } else { m_hSmallImageOpen = *hSmallImageOpen = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FAX_BITMAP_16)); }
if(m_hLargeImage) { *hLargeImage = m_hLargeImage; } else { m_hLargeImage = *hLargeImage = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FAX_BITMAP_32)); }
*cMask = RGB(255, 255, 255);
return S_OK; } }; // endclass CSnapinAbout
HRESULT AddBitmaps(IImageList *pImageList);
#endif // ! C_SNAPIN_H_INCLUDED
|