⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 warmmcbasenode.h

📁 ftpserver very good sample
💻 H
字号:
/** This module is shamelessly stolen from www.codeguru.com  * http://www.codeguru.com/atl/MMCSnapInTutorial.html  * from an article by Leon Finker  * */#ifndef WAR_MMC_BASE_NODE_H#define WAR_MMC_BASE_NODE_H/* SYSTEM INCLUDES *//* PROJECT INCLUDES *//* LOCAL INCLUDES *//* FORWARD REFERENCES */#ifdef __cplusplusextern "C" {#endif/****************** BEGIN OLD STYLE C spesific ********//****************** END OLD STYLE C spesific **********/#ifdef __cplusplus }#endif/****************** BEGIN C++ spesific ****************/template <class T>class ATL_NO_VTABLE WarMmcBaseNode : public CSnapInItemImpl<T>{public:	static const GUID* m_NODETYPE;	static const OLECHAR* m_SZNODETYPE;	static const OLECHAR* m_SZDISPLAY_NAME;	static const CLSID* m_SNAPIN_CLASSID;    CComPtr<IConsole> mpConsole;	WarMmcBaseNode()	{		m_bstrDisplayName = m_SZDISPLAY_NAME;	}	virtual ~WarMmcBaseNode()	{	}       // CSnapInItemImpl   STDMETHOD(GetScopePaneInfo)(SCOPEDATAITEM *pScopeDataItem)   {		if (pScopeDataItem->mask & SDI_STR)			pScopeDataItem->displayname = m_bstrDisplayName;		if (pScopeDataItem->mask & SDI_IMAGE)			pScopeDataItem->nImage = m_scopeDataItem.nImage;		if (pScopeDataItem->mask & SDI_OPENIMAGE)			pScopeDataItem->nOpenImage = m_scopeDataItem.nOpenImage;		if (pScopeDataItem->mask & SDI_PARAM)			pScopeDataItem->lParam = m_scopeDataItem.lParam;		if (pScopeDataItem->mask & SDI_STATE )			pScopeDataItem->nState = m_scopeDataItem.nState;		return S_OK;   }   // CSnapInItemImpl   STDMETHOD(GetResultPaneInfo)(RESULTDATAITEM *pResultDataItem)   {	if (pResultDataItem->bScopeItem)	{		if (pResultDataItem->mask & RDI_STR)			pResultDataItem->str = GetResultPaneColInfo(pResultDataItem->nCol);		if (pResultDataItem->mask & RDI_IMAGE)			pResultDataItem->nImage = m_scopeDataItem.nImage;		if (pResultDataItem->mask & RDI_PARAM)			pResultDataItem->lParam = m_scopeDataItem.lParam;		return S_OK;	}	if (pResultDataItem->mask & RDI_STR)		pResultDataItem->str = GetResultPaneColInfo(pResultDataItem->nCol);	if (pResultDataItem->mask & RDI_IMAGE)		pResultDataItem->nImage = m_resultDataItem.nImage;	if (pResultDataItem->mask & RDI_PARAM)		pResultDataItem->lParam = m_resultDataItem.lParam;	if (pResultDataItem->mask & RDI_INDEX)		pResultDataItem->nIndex = m_resultDataItem.nIndex;	return S_OK;  }   virtual LPOLESTR GetResultPaneColInfo(int nCol)   {		return m_bstrDisplayName;   }   // CSnapInItemImpl   STDMETHOD(Notify)(MMC_NOTIFY_TYPE event, long arg, long param,      IComponentData* pComponentData, IComponent* pComponent,      DATA_OBJECT_TYPES type)   {		// Add code to handle the different notifications.		// Handle MMCN_SHOW and MMCN_EXPAND to enumerate children items.		// In response to MMCN_SHOW you have to enumerate both the scope		// and result pane items.		// For MMCN_EXPAND you only need to enumerate the scope items		// Use IConsoleNameSpace::InsertItem to insert scope pane items		// Use IResultData::InsertItem to insert result pane item.		HRESULT hr = E_NOTIMPL;				_ASSERTE(pComponentData != NULL || pComponent != NULL);		CComPtr<IConsole> spConsole;		CComQIPtr<IHeaderCtrl, &IID_IHeaderCtrl> spHeader;		if (pComponentData != NULL)			spConsole = ((CWarSvrSnapin*)pComponentData)->m_spConsole;		else		{			mpConsole = spConsole = ((CWarSvrSnapinComponent*)pComponent)->m_spConsole;			spHeader = mpConsole;		}		switch (event)		{		case MMCN_CONTEXTHELP:			//hr = OnShowContextHelp(((CWarSvrSnapinComponent*)pComponent)->m_ipDisplayHelp);			break;		case MMCN_SHOW:			{				hr=OnShow(spConsole, arg);								break;			}		case MMCN_EXPAND:			{				hr = OnExpand(arg, spConsole, param);				break;			}		case MMCN_ADD_IMAGES:			{	         hr = OnAddImages((IImageList*) arg);			 break;			}		case MMCN_DBLCLICK:			{			 hr = spConsole->SelectScopeItem(m_scopeDataItem.ID);			break;			}		case MMCN_SELECT:			{			 hr = OnSelect(spConsole, pComponent);			break;			}		case MMCN_RENAME:			{			 hr = OnRename(spConsole, (LPOLESTR)param);			break;			}        case MMCN_VIEW_CHANGE:            {               hr = OnChange(spConsole, (LPARAM)arg, (LONG_PTR)param);            }            break;		}		return hr;   }   HRESULT OnAddImages(IImageList* pImageList)   {	   return CWarSvrSnapin::LoadImages(pImageList);   }   	// CSnapInItemImpl	STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider,long handle, 								   IUnknown* pUnk,DATA_OBJECT_TYPES type)	{		return S_FALSE;	}	// CSnapInItemImpl	STDMETHOD(QueryPagesFor)(DATA_OBJECT_TYPES type)	{		return S_FALSE;	}   // virtual functions called by Notify   //MMCN_CONTEXTHELP	virtual HRESULT OnShowContextHelp(IDisplayHelp *pDisplayHelp) 	{ return S_FALSE; }	//MMCN_EXAPND	virtual HRESULT OnExpand(BOOL bExpand, IConsole *pConsole, HSCOPEITEM parent) 	{   return S_OK; }	//MMCN_SHOW	virtual HRESULT OnShow(IConsole *pConsole, BOOL bShow)	{ return S_FALSE; }	//MMCN_SELECT	virtual HRESULT OnSelect(IConsole *mpConsole, IComponent* pComponent )	{ return S_FALSE; }	//MMCN_RENAME	virtual HRESULT OnRename(IConsole* pConsole, LPOLESTR param)	{ return S_FALSE; }    virtual HRESULT OnChange(IConsole* pConsole, LPARAM data, LONG_PTR hint)	{ return S_FALSE; }       // Rename a node.    virtual HRESULT Rename(IConsole* pConsole, LPOLESTR param)    {        CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace>            spConsoleNameSpace(pConsole);        m_bstrDisplayName = param;        m_scopeDataItem.displayname = m_bstrDisplayName;        spConsoleNameSpace->SetItem(&m_scopeDataItem);                return S_OK;    }                //this function can be used either for result or scope items, by checking the m_nType    HRESULT InvokeWizzard(bool& bHandled, CSnapInObjectRootBase* pObj)    {        CComPtr<IUnknown> pUnk;        HRESULT hr = CoCreateInstance(CLSID_NodeManager, NULL,CLSCTX_INPROC_SERVER,IID_IPropertySheetProvider, (void**)&pUnk);        if (FAILED(hr))            return S_FALSE;            CComQIPtr<IPropertySheetProvider,&IID_IPropertySheetProvider> spPSProvider(pUnk);        CComPtr<IDataObject> spDataObject;        hr = GetDataObject(&spDataObject, CCT_SCOPE);        if (FAILED(hr))            return S_FALSE;            hr = spPSProvider->CreatePropertySheet(L"Property", FALSE, (long)this, spDataObject,MMC_PSO_NEWWIZARDTYPE);        if (FAILED(hr))            return hr;        _ASSERTE(pObj != NULL && (pObj->m_nType == 1 || pObj->m_nType == 2));        HWND hWnd=NULL;                if (pObj->m_nType == 2) // Result Pane        {            IComponent* pComponent;            hr = ((CWarSvrSnapinComponent*)pObj)->QueryInterface(IID_IComponent, (void**)&pComponent);            spPSProvider->AddPrimaryPages(pComponent, TRUE, NULL, FALSE);            if(pComponent != NULL)                pComponent->Release();                        ((CWarSvrSnapinComponent*)pObj)->m_spConsole->GetMainWindow(&hWnd);        }        else	//scope pane        {            IComponentData* pComponentData;            hr = ((CWarSvrSnapin*)pObj)->QueryInterface(IID_IComponentData, (void**)&pComponentData);            spPSProvider->AddPrimaryPages(pComponentData, TRUE, NULL, TRUE);            if(pComponentData != NULL)                pComponentData->Release();            ((CWarSvrSnapin*)pObj)->m_spConsole->GetMainWindow(&hWnd);        }        hr = spPSProvider->Show((long)hWnd,0);        if (hr == S_FALSE) // recover from a failed Show        {            spPSProvider->Show(-1,0); // frees wizard resources            // held by MMC            return S_FALSE;        }                return hr;    }   };#ifdef __cplusplus/* INLINE METHODS *//* EXTERNAL REFERENCES */#endif /* __cplusplus *//****************** END C++ spesific ******************/#endif  /* WAR_MMC_BASE_NODE_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -