📄 basenode.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 + -