CSnapInItemImpl 类
此类提供用于实现管理单元节点对象的方法。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
template <class T, BOOL bIsExtension = FALSE>
class ATL_NO_VTABLE CSnapInItemImpl : public CSnapInItem
参数
T
你的类,派生自 CSnapInItemImpl
。
bIsExtension
如果对象是管理单元扩展,则为 TRUE;否则为 FALSE。
成员
公共构造函数
名称 | 描述 |
---|---|
CSnapInItemImpl::CSnapInItemImpl | 构造函数。 |
公共方法
名称 | 描述 |
---|---|
CSnapInItemImpl::AddMenuItems | 将菜单项添加到上下文菜单。 |
CSnapInItemImpl::Command | 选择自定义菜单项时由控制台调用。 |
CSnapInItemImpl::CreatePropertyPages | 将页添加到管理单元的属性表。 |
CSnapInItemImpl::FillData | 将有关管理单元对象的信息复制到指定的流中。 |
CSnapInItemImpl::GetResultPaneInfo | 检索管理单元的 RESULTDATAITEM 结构。 |
CSnapInItemImpl::GetResultViewType | 确定结果窗格使用的视图类型。 |
CSnapInItemImpl::GetScopePaneInfo | 检索管理单元的 SCOPEDATAITEM 结构。 |
CSnapInItemImpl::Notify | 由控制台调用,以将用户执行的操作通知给管理单元。 |
CSnapInItemImpl::QueryPagesFor | 调用以确定管理单元节点是否支持属性页。 |
CSnapInItemImpl::SetMenuInsertionFlags | 修改管理单元对象的菜单插入标志。 |
CSnapInItemImpl::SetToolbarButtonInfo | 设置指定的工具栏按钮的信息。 |
CSnapInItemImpl::UpdateMenuState | 更新上下文菜单项的状态。 |
CSnapInItemImpl::UpdateToolbarButton | 更新指定的工具栏按钮的状态。 |
公共数据成员
“属性” | 描述 |
---|---|
CSnapInItemImpl::m_bstrDisplayName | 管理单元对象的名称。 |
CSnapInItemImpl::m_resultDataItem | CSnapInItemImpl 对象使用的 Windows RESULTDATAITEM 结构。 |
CSnapInItemImpl::m_scopeDataItem | CSnapInItemImpl 对象使用的 Windows SCOPEDATAITEM 结构。 |
备注
CSnapInItemImpl
为管理单元节点对象提供基本实现,例如添加菜单项和工具栏,以及将管理单元节点的命令转发到相应的处理程序函数。 这些功能是使用多个不同的接口和映射类型实现的。 默认实现通过确定派生类的正确实例,然后将消息转发到正确的实例,来处理发送到节点对象的通知。
继承层次结构
CSnapInItem
CSnapInItemImpl
要求
标头:atlsnap.h
CSnapInItemImpl::AddMenuItems
此方法实现 Win32 函数 IExtendContextMenu::AddMenuItems。
AddMenuItems(
LPCONTEXTMENUCALLBACK piCallback,
long* pInsertionAllowed,
DATA_OBJECT_TYPES type);
参数
piCallback
[in] 指向可将项添加到上下文菜单的 IContextMenuCallback
的指针。
pInsertionAllowed
[in, out] 标识 Microsoft 管理控制台 (MMC) 定义的可用菜单项插入点。 这可以是以下标志的组合:
CCM_INSERTIONALLOWED_TOP:项可以插入到上下文菜单的顶部。
CCM_INSERTIONALLOWED_NEW:项可以插入到“新建”子菜单。
CCM_INSERTIONALLOWED_TASK:项可以插入到“任务”子菜单。
CCM_INSERTIONALLOWED_VIEW:项可以插入到工具栏视图菜单,或结果窗格上下文菜单的“视图”子菜单。
type
[in] 指定对象的类型。 它可以具有以下一个值:
CCT_SCOPE:范围窗格上下文的数据对象。
CCT_RESULT:结果窗格上下文的数据对象。
CCT_SNAPIN_MANAGER:管理单元管理器上下文的数据对象。
CCT_UNINITIALIZED:数据对象的类型无效。
CSnapInItemImpl::Command
此方法实现 Win32 函数 IExtendContextMenu::Command。
Command(long lCommandID, DATA_OBJECT_TYPES type);
参数
lCommandID
[in] 指定菜单项的命令标识符。
type
[in] 指定对象的类型。 它可以具有以下一个值:
CCT_SCOPE:范围窗格上下文的数据对象。
CCT_RESULT:结果窗格上下文的数据对象。
CCT_SNAPIN_MANAGER:管理单元管理器上下文的数据对象。
CCT_UNINITIALIZED:数据对象的类型无效。
CSnapInItemImpl::CreatePropertyPages
此方法实现 Win32 函数 IExtendPropertySheet::CreatePropertyPages。
CreatePropertyPages(
LPPROPERTYSHEETCALLBACK lpProvider,
long handle,
IUnknown* pUnk,
DATA_OBJECT_TYPES type);
参数
lpProvider
[in] 指向 IPropertySheetCallback
接口的指针。
handle
[in] 指定用于将 MMCN_PROPERTY_CHANGE 通知消息路由到相应数据类的句柄。
pUnk
[in] 指向对象上的 IExtendPropertySheet
接口的指针,该对象包含有关节点的上下文信息。
type
[in] 指定对象的类型。 它可以具有以下一个值:
CCT_SCOPE:范围窗格上下文的数据对象。
CCT_RESULT:结果窗格上下文的数据对象。
CCT_SNAPIN_MANAGER:管理单元管理器上下文的数据对象。
CCT_UNINITIALIZED:数据对象的类型无效。
CSnapInItemImpl::CSnapInItemImpl
构造 CSnapInItemImpl
对象。
CSnapInItemImpl();
CSnapInItemImpl::FillData
调用此函数可检索有关项的信息。
FillData(CLIPFORMAT cf, LPSTREAM pStream);
参数
cf
[in] 剪贴板的格式(文本、丰富文本或包含 OLE 项的丰富文本)。
pStream
[in] 指向包含对象数据的流的指针。
备注
若要正确实现此函数,请根据 cf 指示的剪贴板格式,将正确的信息复制到流 (pStream) 中。
CSnapInItemImpl::GetResultViewType
调用此函数可检索管理单元对象的结果窗格的视图类型。
GetResultViewType(
LPOLESTR* ppViewType,
long* pViewOptions);
参数
ppViewType
[out] 指向返回的视图类型的地址的指针。
pViewOptions
[out] 指向 MMC_VIEW_OPTIONS 枚举的指针,该枚举为控制台提供拥有者管理单元指定的选项。 此值可以为下列值之一:
MMC_VIEW_OPTIONS_NOLISTVIEWS = 0x00000001:告知控制台不要在“视图”菜单中显示标准列表视图选项。 仅允许管理单元在结果视图窗格中显示其自身的自定义视图。 这是目前定义的唯一一个选项标志。
MMC_VIEW_OPTIONS_NONE = 0:允许默认视图选项。
CSnapInItemImpl::GetScopePaneInfo
调用此函数可检索管理单元的 SCOPEDATAITEM
结构。
GetScopePaneInfo (SCOPEDATAITEM* pScopeDataItem);
参数
pScopeDataItem
[out] 指向 CSnapInItemImpl
对象的 SCOPEDATAITEM
结构的指针。
CSnapInItemImpl::GetResultPaneInfo
调用此函数可检索管理单元的 RESULTDATAITEM
结构。
GetResultPaneInfo (RESULTDATAITEM* pResultDataItem);
参数
pResultDataItem
[out] 指向 CSnapInItemImpl
对象的 RESULTDATAITEM
结构的指针。
CSnapInItemImpl::m_bstrDisplayName
包含针对节点项显示的字符串。
CComBSTR m_bstrDisplayName;
CSnapInItemImpl::m_scopeDataItem
管理单元数据对象的 SCOPEDATAITEM
结构。
SCOPEDATAITEM m_scopeDataItem;
CSnapInItemImpl::m_resultDataItem
管理单元数据对象的 RESULTDATAITEM 结构。
RESULTDATAITEM m_resultDataItem;
CSnapInItemImpl::Notify
当用户对管理单元对象执行操作时调用。
STDMETHOD(Notify)(
MMC_NOTIFY_TYPE event,
long arg,
long param,
IComponentData* pComponentData,
IComponent* pComponent,
DATA_OBJECT_TYPES type) = 0;
参数
event
[in] 标识用户执行的操作。 可能的通知如下:
MMCN_ACTIVATE:激活和停用窗口时发送。
MMCN_ADD_IMAGES:发送此通知以将图像添加到结果窗格。
MMCN_BTN_CLICK:当用户单击工具栏按钮之一时发送。
MMCN_CLICK:当用户在列表视图项上单击鼠标按钮时发送。
MMCN_DBLCLICK:当用户在列表视图项上双击鼠标按钮时发送。
MMCN_DELETE:通知管理单元应删除对象。
MMCN_EXPAND:当文件夹需要展开或收缩时发送。
MMCN_MINIMIZED:最小化或最大化窗口时发送。
MMCN_PROPERTY_CHANGE:通知管理单元对象其视图即将更改。
MMCN_REMOVE_CHILDREN:当管理单元必须删除它在指定节点下添加的整个子树时发送。
MMCN_RENAME:首次发送以查询重命名,第二次发送以执行重命名。
MMCN_SELECT:当选择了范围或结果视图窗格中的项时发送。
MMCN_SHOW:首次选择或取消选择范围项时发送。
MMCN_VIEW_CHANGE:当管理单元可在发生更改的情况下更新所有视图时发送。
arg
[in] 取决于通知类型。
param
[in] 取决于通知类型。
pComponentData
[out] 指向实现 IComponentData
的对象的指针。 如果通知不是从 IComponentData::Notify
转发的,则此参数为 NULL。
pComponent
[out] 指向实现 IComponent
的对象的指针。 如果通知不是从 IComponent::Notify
转发的,则此参数为 NULL。
type
[in] 指定对象的类型。 它可以具有以下一个值:
CCT_SCOPE:范围窗格上下文的数据对象。
CCT_RESULT:结果窗格上下文的数据对象。
CCT_SNAPIN_MANAGER:管理单元管理器上下文的数据对象。
CCT_UNINITIALIZED:数据对象的类型无效。
CSnapInItemImpl::QueryPagesFor
调用以确定管理单元节点是否支持属性页。
QueryPagesFor(DATA_OBJECT_TYPES type);
CSnapInItemImpl::SetMenuInsertionFlags
调用此函数可修改 pInsertionAllowed 为管理单元对象指定的菜单插入标志。
void SetMenuInsertionFlags(
bool bBeforeInsertion,
long* pInsertionAllowed);
参数
bBeforeInsertion
[in] 如果应该在将项添加到上下文菜单之前调用该函数,则为非零值;否则为 0。
pInsertionAllowed
[in, out] 标识 Microsoft 管理控制台 (MMC) 定义的可用菜单项插入点。 这可以是以下标志的组合:
CCM_INSERTIONALLOWED_TOP:项可以插入到上下文菜单的顶部。
CCM_INSERTIONALLOWED_NEW:项可以插入到“新建”子菜单。
CCM_INSERTIONALLOWED_TASK:项可以插入到“任务”子菜单。
CCM_INSERTIONALLOWED_VIEW:项可以插入到工具栏视图菜单,或结果窗格上下文菜单的“视图”子菜单。
备注
如果你正在开发主管理单元,则可以重置任何插入标志,以限制第三方扩展可以添加的菜单项类型。 例如,主管理单元可以清除 CCM_INSERTIONALLOWED_NEW 标志,以防止扩展添加自身的“新建”菜单项。
不应尝试设置 pInsertionAllowed 中最初已清除的位。 将来的 MMC 版本可能会使用当前未定义的位,因此请不要更改当前未定义的位。
CSnapInItemImpl::SetToolbarButtonInfo
调用此函数可在创建工具栏之前修改管理单元对象的任何工具栏按钮样式。
void SetToolbarButtonInfo(
UINT id,
BYTE* fsState,
BYTE* fsType);
参数
id
[in] 要设置的工具栏按钮的 ID。
fsState
[in] 按钮的状态标志。 可以是以下一项或多项:
TBSTATE_CHECKED:按钮具有 TBSTYLE_CHECKED 样式并已按下。
TBSTATE_ENABLED:按钮接受用户输入。 没有此状态的按钮不接受用户输入并且会灰显。
TBSTATE_HIDDEN:按钮不可见,无法接收用户输入。
TBSTATE_INDETERMINATE:按钮灰显。
TBSTATE_PRESSED:按钮已按下。
TBSTATE_WRAP:按钮后面有一个换行符。 按钮还必须具有 TBSTATE_ENABLED。
fsType
[in] 按钮的状态标志。 可以是以下一项或多项:
TBSTYLE_BUTTON:创建标准按钮。
TBSTYLE_CHECK:创建一个按钮,每次用户单击时,该按钮会在按下和未按下状态之间切换。 按钮处于按下状态时具有不同的背景色。
TBSTYLE_CHECKGROUP:创建一个选中按钮,该按钮在按下组中的另一个按钮之前一直保持按下状态。
TBSTYLE_GROUP:创建一个按钮,该按钮在按下组中的另一个按钮之前一直保持按下状态。
TBSTYLE_SEP:创建一个分隔符,在按钮组之间提供短间隔。 具有此样式的按钮不接收用户输入。
CSnapInItemImpl::UpdateMenuState
调用此函数可以在将菜单项插入到管理单元对象的上下文菜单之前修改该项。
void UpdateMenuState(
UINT id,
LPTSTR pBuf,
UINT* flags);
参数
id
[in] 要设置的菜单项的 ID。
pBuf
[in] 指向要更新的菜单项的字符串的指针。
flags
[in] 指定新的状态标志。 这可以是以下标志的组合:
MF_POPUP:指定这是上下文菜单中的子菜单。 可以使用此子菜单的
lCommandID
将菜单项、插入点和其他子菜单作为其IInsertionPointID
添加到此子菜单。MF_BITMAP 和 MF_OWNERDRAW:不允许使用这些标志,它们会导致返回值 E_INVALIDARG。
MF_SEPARATOR:绘制水平分割线。 只允许
IContextMenuProvider
添加设置了 MF_SEPARATOR 的菜单项。MF_CHECKED:在菜单项的旁边添加一个复选标记。
MF_DISABLED:禁用菜单项,使其无法被选中,但该标志不会使其灰显。
MF_ENABLED:启用菜单项,使其可被选中,并将其从灰显状态还原。
MF_GRAYED:禁用菜单项,将其灰显,使其无法被选中。
MF_MENUBARBREAK:功能与菜单栏的 MF_MENUBREAK 标志相同。 对于下拉菜单、子菜单或快捷菜单,新列与旧列之间将用一条竖线分隔。
MF_MENUBREAK:将项置于新行(对于菜单栏)或新列(对于下拉菜单、子菜单或快捷菜单)上,且不分隔列。
MF_UNCHECKED:不在项的旁边添加复选标记(默认值)。
以下标志组不能一起使用:
MF_DISABLED、MF_ENABLED 和 MF_GRAYED。
MF_MENUBARBREAK 和 MF_MENUBREAK。
MF_CHECKED 和 MF_UNCHECKED。
CSnapInItemImpl::UpdateToolbarButton
调用此函数可在显示管理单元对象的工具栏按钮之前对其进行修改。
BOOL UpdateToolbarButton(UINT id, BYTE fsState);
参数
id
指定要更新的工具栏按钮的按钮 ID。
fsState
指定工具栏按钮状态。 如果要设置此状态,则返回 TRUE。 这可以是以下标志的组合:
ENABLED:按钮接受用户输入。 没有此状态的按钮不接受用户输入并且会灰显。
CHECKED:按钮具有 CHECKED 样式并已按下。
HIDDEN:按钮不可见,无法接收用户输入。
INDETERMINATE:按钮灰显。
BUTTONPRESSED:按钮已按下。