windows-nt/Source/XPSP1/NT/admin/snapin/dfsadmin/dfsgui/ictxmenu.cpp

110 lines
2.2 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Module Name:
IctxMenu.cpp
Abstract:
This module contains the implementation for CDfsSnapinScopeManager.
Contains the methods of Interface IExtendContextMenu
--*/
#include "stdafx.h"
#include "DfsGUI.h"
#include "MmcDispl.h" // For CMmcDisplay
#include "DfsScope.h"
STDMETHODIMP
CDfsSnapinScopeManager::AddMenuItems(
IN LPDATAOBJECT i_lpDataObject,
IN LPCONTEXTMENUCALLBACK i_lpContextMenuCallback,
IN LPLONG i_lpInsertionAllowed
)
/*++
Routine Description:
Calls the appropriate handler to add the context menu.
Arguments:
i_lpDataObject - Pointer to the IDataObject that identifies the node to which
the menu must be added.
i_lpContextMenuCallback - A callback(function pointer) that is used to add the menu items
i_lpInsertionAllowed - Specifies what menus can be added and where they can be added.
Return value:
S_OK, On success
E_INVALIDARG, On incorrect input parameters
HRESULT sent by methods called, if it is not S_OK.
E_UNEXPECTED, on other errors.
--*/
{
RETURN_INVALIDARG_IF_NULL(i_lpDataObject);
RETURN_INVALIDARG_IF_NULL(i_lpContextMenuCallback);
RETURN_INVALIDARG_IF_NULL(i_lpInsertionAllowed);
HRESULT hr = E_UNEXPECTED;
CMmcDisplay* pCMmcDisplayObj = NULL;
hr = GetDisplayObject(i_lpDataObject, &pCMmcDisplayObj);
RETURN_IF_FAILED(hr);
// Use the virtual method AddMenus in the display object
hr = pCMmcDisplayObj->AddMenuItems(i_lpContextMenuCallback, i_lpInsertionAllowed);
RETURN_IF_FAILED(hr);
return S_OK;
}
STDMETHODIMP
CDfsSnapinScopeManager :: Command(
IN LONG i_lCommandID,
IN LPDATAOBJECT i_lpDataObject
)
/*++
Routine Description:
Use to take action on a menu click or menu command.
Arguments:
i_lCommandID - Used to identify which menu was clicked
i_lpDataObject - Pointer to the IDataObject that identifies the node to which
the menu belongs.
--*/
{
RETURN_INVALIDARG_IF_NULL(i_lpDataObject);
HRESULT hr = E_UNEXPECTED;
CMmcDisplay* pCMmcDisplayObj = NULL;
hr = GetDisplayObject(i_lpDataObject, &pCMmcDisplayObj);
RETURN_IF_FAILED(hr);
// Use the virtual method Command in the display object
hr = pCMmcDisplayObj->Command(i_lCommandID);
RETURN_IF_FAILED(hr);
return S_OK;
}