485 lines
13 KiB
C++
485 lines
13 KiB
C++
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1994 - 1999
|
||
|
//
|
||
|
// File: Component2Testsnap.cxx
|
||
|
//
|
||
|
// Contents: Classes that implement Component2Test snapin using the framework.
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
#include "stdafx.hxx"
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestRootItem::ScInit
|
||
|
//
|
||
|
// Synopsis: Called immeadiately after the item is created to init
|
||
|
// displayname, icon index etc...
|
||
|
//
|
||
|
// Arguments: [CBaseSnapin] -
|
||
|
// [CColumnInfoEx] - Any columns to be displayed for this item.
|
||
|
// [INT] - # of columns
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestRootItem::ScInit(CBaseSnapin *pSnapin, CColumnInfoEx *pcolinfoex, INT ccolinfoex, BOOL fIsRoot)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestRootItem::ScInit"));
|
||
|
|
||
|
sc = CBaseSnapinItem::ScInit(pSnapin, pcolinfoex, ccolinfoex, fIsRoot);
|
||
|
if (sc)
|
||
|
return sc;
|
||
|
|
||
|
// Init following
|
||
|
// a. Icon index.
|
||
|
// b. Load display name.
|
||
|
|
||
|
m_uIconIndex = 3; // use an enum instead of 3
|
||
|
|
||
|
m_strDisplayName.LoadString(_Module.GetResourceInstance(), IDS_Component2TestROOT);
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestRootItem::ScGetField
|
||
|
//
|
||
|
// Synopsis: Get the string representation for given field to display
|
||
|
// it in result pane.
|
||
|
//
|
||
|
// Arguments: [DAT] - The column requested (this is an enumeration).
|
||
|
// [tstring] - Out string.
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestRootItem::ScGetField (DAT dat, tstring& strField)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestRootItem::ScGetField"));
|
||
|
|
||
|
switch(dat)
|
||
|
{
|
||
|
case datString1:
|
||
|
strField = _T("Root String1");
|
||
|
break;
|
||
|
|
||
|
case datString2:
|
||
|
strField = _T("Root String2");
|
||
|
break;
|
||
|
|
||
|
case datString3:
|
||
|
strField = _T("Root String3");
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
E_INVALIDARG;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return (sc);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestRootItem::ScCreateChildren
|
||
|
//
|
||
|
// Synopsis: Create any children (nodes & leaf items) for this item.
|
||
|
//
|
||
|
// Arguments: None
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestRootItem::ScCreateChildren ()
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestRootItem::ScCreateChildren"));
|
||
|
|
||
|
t_itemChild * pitemChild = NULL;
|
||
|
t_itemChild * pitemPrevious = NULL;
|
||
|
|
||
|
// Let us create 10 items for this container.
|
||
|
for (int i = 0; i < 10; ++i)
|
||
|
{
|
||
|
// Create the child nodes and init them.
|
||
|
sc = CComponent2TestSnapinLVLeafItem::ScCreateLVLeafItem(this, pitemPrevious, &pitemChild, FALSE); // Why FALSE???
|
||
|
if (sc)
|
||
|
return sc;
|
||
|
pitemPrevious = pitemChild;
|
||
|
}
|
||
|
|
||
|
return (sc);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestRootItem::ScQueryDispatch
|
||
|
//
|
||
|
// Synopsis: We support IDispatch for scripting, just return a pointer
|
||
|
// to the IDispatch of ourselves.
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestRootItem::ScQueryDispatch(long cookie, DATA_OBJECT_TYPES type, LPDISPATCH *ppDispatch)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestRootItem::ScQueryDispatch"));
|
||
|
|
||
|
*ppDispatch = dynamic_cast<IDispatch*>(this);
|
||
|
if (! *ppDispatch)
|
||
|
return (sc = E_NOINTERFACE);
|
||
|
|
||
|
(*ppDispatch)->AddRef();
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestRootItem::StringFromScriptToSnapin(BSTR bstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestRootItem::StringFromScriptToSnapin"));
|
||
|
|
||
|
// The script is supposed to give us this function name in the string.
|
||
|
if (0 == _wcsicmp(bstrMessage, L"StringFromScriptToSnapin"))
|
||
|
return sc.ToHr();
|
||
|
|
||
|
sc = E_FAIL;
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestRootItem::StringFromSnapinToScript(BSTR *pbstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestRootItem::StringFromSnapinToScript"));
|
||
|
sc = ScCheckPointers(pbstrMessage);
|
||
|
if (sc)
|
||
|
return sc.ToHr();
|
||
|
|
||
|
// The script is supposed to expect this function name in the string.
|
||
|
*pbstrMessage = ::SysAllocString(OLESTR("StringFromSnapinToScript"));
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestRootItem::get_Name(BSTR *pbstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestRootItem::get_Name"));
|
||
|
sc = ScCheckPointers(pbstrMessage);
|
||
|
if (sc)
|
||
|
return sc.ToHr();
|
||
|
|
||
|
// The script is supposed to expect this function name in the string.
|
||
|
*pbstrMessage = ::SysAllocString(OLESTR("Name"));
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestRootItem::put_Name(BSTR bstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestRootItem::put_Name"));
|
||
|
|
||
|
// The script is supposed to give us this function name in the string.
|
||
|
if (0 == _wcsicmp(bstrMessage, L"Name"))
|
||
|
return sc.ToHr();
|
||
|
|
||
|
sc = E_FAIL;
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestSnapinLVLeafItem::ScInit
|
||
|
//
|
||
|
// Synopsis: Called immeadiately after the item is created to init
|
||
|
// displayname, icon index etc...
|
||
|
//
|
||
|
// Arguments: [CBaseSnapin] -
|
||
|
// [CColumnInfoEx] - Any columns to be displayed for this item.
|
||
|
// [INT] - # of columns
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestSnapinLVLeafItem::ScInit(CBaseSnapin *pSnapin, CColumnInfoEx *pcolinfoex, INT ccolinfoex, BOOL fIsRoot)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestSnapinLVLeafItem::ScInit"));
|
||
|
|
||
|
sc = CBaseSnapinItem::ScInit(pSnapin, pcolinfoex, ccolinfoex, fIsRoot);
|
||
|
if (sc)
|
||
|
return sc;
|
||
|
|
||
|
// Init following
|
||
|
// a. Icon index.
|
||
|
// b. Load display name.
|
||
|
|
||
|
m_uIconIndex = 7; // use an enum instead of 7
|
||
|
|
||
|
m_strDisplayName.LoadString(_Module.GetResourceInstance(), IDS_LVLeafItem);
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestSnapinLVLeafItem::ScGetField
|
||
|
//
|
||
|
// Synopsis: Get the string representation for given field to display
|
||
|
// it in result pane.
|
||
|
//
|
||
|
// Arguments: [DAT] - The column requested (this is an enumeration).
|
||
|
// [tstring] - Out string.
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestSnapinLVLeafItem::ScGetField (DAT dat, tstring& strField)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestSnapinLVLeafItem::ScGetField"));
|
||
|
|
||
|
switch(dat)
|
||
|
{
|
||
|
case datString1:
|
||
|
strField = _T("LVLeaf String1");
|
||
|
break;
|
||
|
|
||
|
case datString2:
|
||
|
strField = _T("LVLeaf String2");
|
||
|
break;
|
||
|
|
||
|
case datString3:
|
||
|
strField = _T("LVLeaf String3");
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
E_INVALIDARG;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return (sc);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestSnapinLVLeafItem::ScCreateLVLeafItem
|
||
|
//
|
||
|
// Synopsis: Do we really need this method?
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestSnapinLVLeafItem::ScCreateLVLeafItem(CComponent2TestRootItem *pitemParent, t_itemChild * pitemPrevious, t_itemChild ** ppitem, BOOL fNew)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestSnapinLVLeafItem::ScCreateLVLeafItem"));
|
||
|
t_itemChild * pitem = NULL;
|
||
|
*ppitem = NULL;
|
||
|
|
||
|
// What to do here?
|
||
|
sc = ::ScCreateItem(pitemParent, pitemPrevious, &pitem, fNew);
|
||
|
if (sc)
|
||
|
return sc;
|
||
|
|
||
|
*ppitem = pitem;
|
||
|
|
||
|
return (sc);
|
||
|
}
|
||
|
|
||
|
// Initialize context menu structures. Let us have one item for demonstration.
|
||
|
SnapinMenuItem CComponent2TestSnapinLVLeafItem::s_rgmenuitemLVLeafItem[] =
|
||
|
{
|
||
|
{IDS_NewLVItem, IDS_NewLVItem, IDS_NewLVItem, CCM_INSERTIONPOINTID_PRIMARY_TOP, NULL, dwMenuAlwaysEnable, dwMenuNeverGray, dwMenuNeverChecked},
|
||
|
};
|
||
|
|
||
|
INT CComponent2TestSnapinLVLeafItem::s_cmenuitemLVLeafItem = CMENUITEM(s_rgmenuitemLVLeafItem);
|
||
|
|
||
|
// -----------------------------------------------------------------------------
|
||
|
SnapinMenuItem *CComponent2TestSnapinLVLeafItem::Pmenuitem(void)
|
||
|
{
|
||
|
return s_rgmenuitemLVLeafItem;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------------
|
||
|
INT CComponent2TestSnapinLVLeafItem::CMenuItem(void)
|
||
|
{
|
||
|
return s_cmenuitemLVLeafItem;
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestSnapinLVLeafItem::ScCommand
|
||
|
//
|
||
|
// Synopsis:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestSnapinLVLeafItem::ScCommand (long nCommandID, CComponent *pComponent)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestSnapinLVLeafItem::ScCommand"));
|
||
|
|
||
|
switch(nCommandID)
|
||
|
{
|
||
|
case IDS_NewLVItem:
|
||
|
sc = ScInsertResultItem(pComponent);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
sc = E_INVALIDARG;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return (sc);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CComponent2TestSnapinLVLeafItem::ScQueryDispatch
|
||
|
//
|
||
|
// Synopsis: We support IDispatch for scripting, just return a pointer
|
||
|
// to the IDispatch of ourselves.
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
SC CComponent2TestSnapinLVLeafItem::ScQueryDispatch(long cookie, DATA_OBJECT_TYPES type, LPDISPATCH *ppDispatch)
|
||
|
{
|
||
|
DECLARE_SC(sc, _T("CComponent2TestSnapinLVLeafItem::ScQueryDispatch"));
|
||
|
|
||
|
*ppDispatch = dynamic_cast<IDispatch *>(this);
|
||
|
if (! *ppDispatch)
|
||
|
return (sc = E_NOINTERFACE);
|
||
|
|
||
|
(*ppDispatch)->AddRef();
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT CComponent2TestSnapinLVLeafItem::StringFromScriptToSnapin(BSTR bstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestSnapinLVLeafItem::StringFromScriptToSnapin"));
|
||
|
|
||
|
// The script is supposed to give us this function name in the string.
|
||
|
if (0 == _wcsicmp(bstrMessage, L"StringFromScriptToSnapin"))
|
||
|
return sc.ToHr();
|
||
|
|
||
|
sc = E_FAIL;
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestSnapinLVLeafItem::StringFromSnapinToScript(BSTR *pbstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestSnapinLVLeafItem::StringFromSnapinToScript"));
|
||
|
sc = ScCheckPointers(pbstrMessage);
|
||
|
if (sc)
|
||
|
return sc.ToHr();
|
||
|
|
||
|
// The script is supposed to expect this function name in the string.
|
||
|
*pbstrMessage = ::SysAllocString(OLESTR("StringFromSnapinToScript"));
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestSnapinLVLeafItem::get_Name(BSTR *pbstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestSnapinLVLeafItem::get_Name"));
|
||
|
sc = ScCheckPointers(pbstrMessage);
|
||
|
if (sc)
|
||
|
return sc.ToHr();
|
||
|
|
||
|
// The script is supposed to expect this function name in the string.
|
||
|
*pbstrMessage = ::SysAllocString(OLESTR("Name"));
|
||
|
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
HRESULT CComponent2TestSnapinLVLeafItem::put_Name(BSTR bstrMessage)
|
||
|
{
|
||
|
DECLARE_SC(sc , _T("CComponent2TestSnapinLVLeafItem::put_Name"));
|
||
|
|
||
|
// The script is supposed to give us this function name in the string.
|
||
|
if (0 == _wcsicmp(bstrMessage, L"Name"))
|
||
|
return sc.ToHr();
|
||
|
|
||
|
sc = E_FAIL;
|
||
|
|
||
|
return sc.ToHr();
|
||
|
}
|
||
|
|
||
|
|
||
|
//-------------------------------------------------------------------------------------
|
||
|
// class CComponent2TestSnapin
|
||
|
|
||
|
#pragma BEGIN_CODESPACE_DATA
|
||
|
SNR CComponent2TestSnapin::s_rgsnr[] =
|
||
|
{
|
||
|
SNR(&nodetypeComponent2TestRoot, snrEnumSP ), // Standalone snapin.
|
||
|
SNR(&nodetypeComponent2TestLVLeafItem, snrEnumSP | snrEnumRP ), // enumerates this node in the scope pane and result pane.
|
||
|
};
|
||
|
|
||
|
LONG CComponent2TestSnapin::s_rgiconid[] = {3};
|
||
|
LONG CComponent2TestSnapin::s_iconidStatic = 2;
|
||
|
|
||
|
|
||
|
CColumnInfoEx CComponent2TestSnapin::s_colinfo[] =
|
||
|
{
|
||
|
CColumnInfoEx(_T("Column Name0"), LVCFMT_LEFT, 180, datString1),
|
||
|
CColumnInfoEx(_T("Column Name1"), LVCFMT_LEFT, 180, datString2),
|
||
|
CColumnInfoEx(_T("Column Name2"), LVCFMT_LEFT, 180, datString3),
|
||
|
};
|
||
|
|
||
|
INT CComponent2TestSnapin::s_ccolinfo = sizeof(s_colinfo) / sizeof(CColumnInfoEx);
|
||
|
INT CComponent2TestSnapin::s_colwidths[1];
|
||
|
#pragma END_CODESPACE_DATA
|
||
|
|
||
|
// include members needed for every snapin.
|
||
|
SNAPIN_DEFINE(CComponent2TestSnapin);
|
||
|
|
||
|
/* CComponent2TestSnapin::CComponent2TestSnapin
|
||
|
*
|
||
|
* PURPOSE: Constructor
|
||
|
*
|
||
|
* PARAMETERS: None
|
||
|
*
|
||
|
*/
|
||
|
CComponent2TestSnapin::CComponent2TestSnapin()
|
||
|
{
|
||
|
m_pstrDisplayName = new tstring();
|
||
|
|
||
|
*m_pstrDisplayName = _T("Component2Test Snapin Root");
|
||
|
}
|
||
|
|
||
|
/* CComponent2TestSnapin::~CComponent2TestSnapin
|
||
|
*
|
||
|
* PURPOSE: Destructor
|
||
|
*
|
||
|
* PARAMETERS: None
|
||
|
*
|
||
|
*/
|
||
|
CComponent2TestSnapin::~CComponent2TestSnapin()
|
||
|
{
|
||
|
delete m_pstrDisplayName;
|
||
|
}
|
||
|
|