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專案可以插入Task子功能表。
CCM_INSERTIONALLOWED_VIEW專案可以插入工具列檢視功能表或結果窗格操作功能表的 [檢視] 子選單中。
type
[in]指定物件的類型。 它可以有下列其中一個值:
CCT_SCOPE範圍窗格內容的數據物件。
CCT_RESULT結果窗格內容的數據物件。
CCT_SNAPIN_MANAGER嵌入式管理單元管理員內容的 Data 物件。
CCT_UNINITIALIZED Data 物件的類型無效。
CSnapInItemImpl::Command
這個方法會實作 Win32 函式 IExtendContextMenu::Command。
Command(long lCommandID, DATA_OBJECT_TYPES type);
參數
lCommandID
[in]指定功能表項的命令標識碼。
type
[in]指定物件的類型。 它可以有下列其中一個值:
CCT_SCOPE範圍窗格內容的數據物件。
CCT_RESULT結果窗格內容的數據物件。
CCT_SNAPIN_MANAGER嵌入式管理單元管理員內容的 Data 物件。
CCT_UNINITIALIZED Data 物件的類型無效。
CSnapInItemImpl::CreatePropertyPages
這個方法會實作 Win32 函式 IExtendPropertySheet::CreatePropertyPages。
CreatePropertyPages(
LPPROPERTYSHEETCALLBACK lpProvider,
long handle,
IUnknown* pUnk,
DATA_OBJECT_TYPES type);
參數
lpProvider
[in]介面的 IPropertySheetCallback
指標。
控制代碼
[in]指定用來將MMCN_PROPERTY_CHANGE通知訊息路由傳送至適當數據類別的句柄。
朋克
[in] IExtendPropertySheet
物件上介面的指標,其中包含節點的內容資訊。
type
[in]指定物件的類型。 它可以有下列其中一個值:
CCT_SCOPE範圍窗格內容的數據物件。
CCT_RESULT結果窗格內容的數據物件。
CCT_SNAPIN_MANAGER嵌入式管理單元管理員內容的 Data 物件。
CCT_UNINITIALIZED Data 物件的類型無效。
CSnapInItemImpl::CSnapInItemImpl
建構 CSnapInItemImpl
物件。
CSnapInItemImpl();
CSnapInItemImpl::FillData
呼叫此函式以擷取專案的相關信息。
FillData(CLIPFORMAT cf, LPSTREAM pStream);
參數
cf
[in]剪貼簿的格式(文字、RTF 或具有 OLE 專案的 RTF 文字)。
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 Sent,通知嵌入式管理單元應該刪除物件。
MMCN_EXPAND需要展開或合約資料夾時傳送。
MMCN_MINIMIZED視窗最小化或最大化時傳送。
MMCN_PROPERTY_CHANGE Sent 通知嵌入式管理單元物件,嵌入式管理單元對象的檢視即將變更。
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嵌入式管理單元管理員內容的 Data 物件。
CCT_UNINITIALIZED Data 物件的類型無效。
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專案可以插入Task子功能表。
CCM_INSERTIONALLOWED_VIEW專案可以插入工具列檢視功能表或結果窗格操作功能表的 [檢視] 子選單中。
備註
如果您正在開發主要嵌入式管理單元,則可以重設任何插入旗標,以限制第三方擴充功能可以新增的功能表項種類。 例如,主要嵌入式管理單元可以清除CCM_INSERTIONALLOWED_NEW旗標,以防止擴充功能新增自己的 [建立新] 功能表項。
您不應該嘗試在原本清除的 pInsertionAllowed 中設定位。 未來的 MMC 版本可能會使用目前未定義的位,因此您不應該變更目前未定義的位。
CSnapInItemImpl::SetToolbarButtonInfo
呼叫此函式,在建立工具列之前修改嵌入式管理單元物件的任何工具列按鈕樣式。
void SetToolbarButtonInfo(
UINT id,
BYTE* fsState,
BYTE* fsType);
參數
id
[in]要設定之工具列按鈕的識別碼。
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]要設定之功能表項的標識碼。
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
指定要更新之工具列按鈕的按鈕標識碼。
fsState
指定工具列按鈕狀態。 如果要設定此狀態,則傳回 TRUE。 這可以是下列旗標的組合:
ENABLED 按鈕接受用戶輸入。 沒有此狀態的按鈕不接受使用者輸入,且呈現灰色。
CHECKED 按鈕具有 CHECKED 樣式,並正在按下。
HIDDEN 按鈕不可見且無法接收使用者輸入。
不確定 按鈕呈現灰色。
BUTTONPRESSED 正在按下按鈕。