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

📄 basenode.h

📁 非常不错的财政管理系统
💻 H
字号:
//basenode.h
#ifndef __BASE_H__
#define __BASE_H__


template <class T>
class ATL_NO_VTABLE CBaseNodeItem : public CSnapInItemImpl<T>
{
public:
	//节点的类型,用GUID标识,当通过继承该类
	//实现新的节点时,需要生成新的GUID来标识该类代表的节点
	static const GUID* m_NODETYPE;
	//节点类型的字符串标识,一般取m_NODETYPE
	//的GUID字符串表示
	static const OLECHAR* m_SZNODETYPE;
	//节点在树控件中的显示名
	static const OLECHAR* m_SZDISPLAY_NAME;
	//管理单元Snapin的ClSID,用户标识该管理单元
	//也通过该参数得知该节点属于的管理单元.
	static const CLSID* m_SNAPIN_CLASSID;
    //构造类
   	CBaseNodeItem()
	{   
         //m_bstrDisplayName为显示在右边结构视图中的数据
		//一般取和树节点显示名相同的名称
		m_bstrDisplayName = m_SZDISPLAY_NAME;
	}
    //析构类
	virtual ~CBaseNodeItem()
	{
	}    
    //*************************************************
    //以下定义了CSnapInItemImpl的实现函数
    //GetScopePaneInfo--得到树控件中的信息
    //GetResultPaneInfo--得到结果视图中的信息
    //Notify---处理通知消息
    //CreatePropertyPages--创建属性页
    //QueryPagesFor--查询属性页
    //*************************************************	
	// 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 = ((CAuthorityMgr*)pComponentData)->m_spConsole;
		else
		{
			spConsole = ((CAuthorityMgrComponent*)pComponent)->m_spConsole;
			spHeader = spConsole;
		}

		switch (event)
		{
		case MMCN_CONTEXTHELP:
	    	hr = OnShowContextHelp(((CAuthorityMgrComponent*)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_REFRESH://刷新
			{
			 hr = OnRefresh(spConsole);
			 break;
			}

		}
		return hr;
   }

   	// 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;
	}
   //MMCN_ADD_IMAGES----添加图片
   HRESULT OnAddImages(IImageList* pImageList)
   {
	   return CAuthorityMgr::LoadImages(pImageList);
   }
   // 以下虚函数被Notify函数调用,其具体实现可能在该类的继承类中.
   //MMCN_CONTEXTHELP----帮助
	virtual HRESULT OnShowContextHelp(IDisplayHelp *pDisplayHelp) 
	{ return S_FALSE; }
	//MMCN_EXAPND----展开
	virtual HRESULT OnExpand(BOOL bExpand, IConsole *pConsole, HSCOPEITEM parent) 
	{ return S_FALSE; }
	//MMCN_SHOW-----显示
	virtual HRESULT OnShow(IConsole *pConsole, BOOL bShow)
	{ return S_FALSE; }
	//MMCN_REFRESH---刷新
	virtual HRESULT OnRefresh(IConsole *pConsole) { return S_FALSE; }
	//MMCN_SELECT----选择
	virtual HRESULT OnSelect(IConsole *spConsole, IComponent* pComponent )
	{ return S_FALSE; }
	//MMCN_RENAME---重命名
	virtual HRESULT OnRename(IConsole* pConsole, LPOLESTR param)
	{ return S_FALSE; }

}

#endif //__BASE_H__

⌨️ 快捷键说明

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