windows-nt/Source/XPSP1/NT/printscan/fax/admin/faxadmin/inode.cpp
2020-09-26 16:20:57 +08:00

1245 lines
38 KiB
C++

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
inode.h
Abstract:
This file contains partial implementation of
the node abstract base class.
Environment:
WIN32 User Mode
Author:
Darwin Ouyang (t-darouy) 30-Sept-1997
--*/
/*++
To create a new node type, create a new class that inheits from CInternalNode.
Implement all the methods in the Mandatory CInternalNode category listed in the
header file for this class. They are marked as pure virtual, to insure your class
will not compile unless these methods are implemented.
To add other functionality to the node, override the default implementation
included below.
TODO: add a default implemention of InsertItem so that the new node knows how to
insert itself into a result or scope pane view, instead of the parent
node having an InsertItem method.
--*/
#include "stdafx.h"
#include "inode.h"
#include "faxsnapin.h" // snapin base
#include "faxdataobj.h" // dataobject
#include "faxhelper.h" // ole helper functions
#include "faxstrt.h" // string table
#pragma hdrstop
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Default mandatory CInternalNode implementations.
//
//
const LPTSTR
CInternalNode::GetNodeDescription()
/*++
Routine Description:
Returns a const TSTR pointer to the node's display description. You must not
free this string, it is internally used.
Arguments:
None.
Return Value:
A const pointer to a TSTR.
--*/
{
return ::GlobalStringTable->GetString( IDS_GENERIC_NODE );
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IComponentData default implementation.
//
//
HRESULT STDMETHODCALLTYPE
CInternalNode::ScopeNotify(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * pDO,
IN MMC_NOTIFY_TYPE event,
IN LPARAM arg,
IN LPARAM param)
/*++
Routine Description:
This routine dispatches scope pane events to their respective handlers.
Do not override this procedure, instead override the individual event handlers
declared below.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
pDO - a pointer to the IDataObject associated with this node
event - the MMC event
arg, param - the event parameters
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ScopeNotify") ));
HRESULT hr;
if( pDO != NULL ) {
switch(event) {
case MMCN_EXPAND:
ATLTRACE(_T(" ****ScopeNotify event: MMCN_EXPAND\n"));
hr = ScopeOnExpand(pCompData, pDO, arg, param);
break;
case MMCN_DELETE:
ATLTRACE(_T(" ****ScopeNotify event: MMCN_DELETE\n"));
hr = ScopeOnDelete(pCompData, pDO, arg, param);
break;
case MMCN_RENAME:
ATLTRACE(_T(" ****ScopeNotify event: MMCN_RENAME\n"));
hr = ScopeOnRename(pCompData, pDO, arg, param);
break;
// if we need more events later on for the scope pane, they MUST
// be added HERE, as well as default handlers added below
default:
ATLTRACE(_T(" ****ScopeNotify event: unimplemented event %x\n"), event);
hr = S_FALSE;
break;
}
} else {
if( event == MMCN_PROPERTY_CHANGE ) {
ATLTRACE(_T(" ****ScopeNotify event: MMCN_PROPERTY_CHANGE\n"));
hr = ScopeOnPropertyChange(pCompData, pDO, arg, param);
} else {
assert( FALSE );
hr = E_UNEXPECTED;
}
}
return hr;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ScopeGetDisplayInfo(
IN CFaxComponentData * pCompData,
IN OUT SCOPEDATAITEM __RPC_FAR *pScopeDataItem)
/*++
Routine Description:
This routine dispatches scope pane GetDisplayInfo requests to the appropriate handlers
in the mandatory implementations of the node.
Override this method if you want more specific behavior to a GetDisplayInfo call, otherwise
just call the mandatory methods.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
pScopeDataItem - a pointer to the SCOPEDATAITEM struct which needs to be filled in.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// DebugPrint(( TEXT("Trace: CInternalNode::ScopeGetDisplayInfo") ));
// override this method if you need more selective display info in
// the scope pane.
assert(pScopeDataItem != NULL);
if( pScopeDataItem->mask & SDI_STR ) {
pScopeDataItem->displayname = GetNodeDisplayName();
}
if( pScopeDataItem->mask & SDI_IMAGE ) {
pScopeDataItem->nImage = GetNodeDisplayImage();
}
if( pScopeDataItem->mask & SDI_OPENIMAGE ) {
pScopeDataItem->nOpenImage = GetNodeDisplayOpenImage();
}
return S_OK;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ScopeQueryDataObject(
IN CFaxComponentData * pCompData,
IN MMC_COOKIE cookie,
IN DATA_OBJECT_TYPES type,
OUT LPDATAOBJECT __RPC_FAR *ppDataObject)
/*++
Routine Description:
This routine creates and returns a IDataObject containing context information for the current node.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
cookie - the cookie of the target node
type - indicates the the node type IE scope, result, etc.
ppDataobject - store the pointer to the new data object here.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// DebugPrint(( TEXT("Trace: CInternalNode::ScopeQueryDataObject") ));
HRESULT hr = S_OK;
INT iResult;
CFaxDataObject *pdoNew = NULL;
do {
pdoNew = new CComObject< CFaxDataObject >;
if(!pdoNew) {
hr = E_OUTOFMEMORY;
assert( m_pCompData->m_pConsole != NULL );
if ( m_pCompData->m_pConsole != NULL ) {
m_pCompData->m_pConsole->MessageBox(::GlobalStringTable->GetString(IDS_OUT_OF_MEMORY) ,
::GlobalStringTable->GetString(IDS_ERR_TITLE),
MB_OK, &iResult);
}
break;
}
pdoNew->SetCookie( GetCookie() );
pdoNew->SetOwner( GetThis() );
pdoNew->SetContext( type );
*ppDataObject = pdoNew;
// addref it **** is this needed???!?
(*ppDataObject)->AddRef();
} while(0);
return hr;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IComponent default implementation.
//
//
HRESULT
STDMETHODCALLTYPE
CInternalNode::ResultNotify(
IN CFaxComponent * pComp,
IN CFaxDataObject * pDO,
IN MMC_NOTIFY_TYPE event,
IN LPARAM arg,
IN LPARAM param)
/*++
Routine Description:
This routine dispatches result pane events to their respective handlers.
Do not override this procedure, instead override the individual event handlers
declared below.
Arguments:
pComp - a pointer to the IComponent associated with this node.
pDO - a pointer to the IDataObject associated with this node
event - the MMC event
arg, param - the event parameters
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ResultNotify") ));
HRESULT hr;
if( pDO != NULL ) {
switch(event) {
case MMCN_ACTIVATE:
ATLTRACE(_T(" ****ResultNotify event: MMCN_ACTIVATE\n"));
hr = ResultOnActivate(pComp, pDO, arg, param);
break;
case MMCN_ADD_IMAGES:
ATLTRACE(_T(" ****ResultNotify event: MMCN_ADD_IMAGES\n"));
hr = ResultOnAddImages(pComp, pDO, arg, param);
break;
case MMCN_BTN_CLICK:
ATLTRACE(_T(" ****ResultNotify event: MMCN_BTN_CLICK\n"));
hr = ResultOnButtonClick(pComp, pDO, arg, param);
break;
case MMCN_CLICK:
ATLTRACE(_T(" ****ResultNotify event: MMCN_CLICK\n"));
hr = ResultOnClick(pComp, pDO, arg, param);
break;
case MMCN_DBLCLICK:
ATLTRACE(_T(" ****ResultNotify event: MMCN_DBLCLICK\n"));
hr = ResultOnDoubleClick(pComp, pDO, arg, param);
break;
case MMCN_DELETE:
ATLTRACE(_T(" ****ResultNotify event: MMCN_DELETE\n"));
hr = ResultOnDelete(pComp, pDO, arg, param);
break;
case MMCN_EXPAND:
ATLTRACE(_T(" ****ResultNotify event: MMCN_EXPAND\n"));
hr = ResultOnExpand(pComp, pDO, arg, param);
break;
case MMCN_MINIMIZED:
ATLTRACE(_T(" ****ResultNotify event: MMCN_MINIMIZED\n"));
hr = ResultOnMinimized(pComp, pDO, arg, param);
break;
case MMCN_QUERY_PASTE:
ATLTRACE(_T(" ****ResultNotify event: MMCN_MINIMIZED\n"));
hr = ResultOnQueryPaste(pComp, pDO, arg, param);
break;
case MMCN_REMOVE_CHILDREN:
ATLTRACE(_T(" ****ResultNotify event: MMCN_REMOVE_CHILDREN\n"));
hr = ResultOnRemoveChildren(pComp, pDO, arg, param);
break;
case MMCN_RENAME:
ATLTRACE(_T(" ****ResultNotify event: MMCN_RENAME\n"));
hr = ResultOnRename(pComp, pDO, arg, param);
break;
case MMCN_SELECT:
ATLTRACE(_T(" ****ResultNotify event: MMCN_SELECT"));
#ifdef DEBUG
if( HIWORD( arg ) == TRUE ) {
ATLTRACE(_T(" select\n"));
} else {
ATLTRACE(_T(" unselect\n"));
}
#endif
hr = ResultOnSelect(pComp, pDO, arg, param);
break;
case MMCN_SHOW:
ATLTRACE(_T(" ****ResultNotify event: MMCN_SHOW\n"));
hr = ResultOnShow(pComp, pDO, arg, param);
break;
case MMCN_VIEW_CHANGE:
ATLTRACE(_T(" ****ResultNotify event: MMCN_VIEW_CHANGE\n"));
hr = ResultOnViewChange(pComp, pDO, arg, param);
break;
// if we need more events later on for the result pane, they MUST
// be added HERE, as well as default handlers added below
default:
ATLTRACE(_T(" ****ResultNotify event: unimplemented event %x\n"), event);
hr = S_FALSE;
break;
}
} else {
// some events do not return a data object
if( event == MMCN_PROPERTY_CHANGE ) {
ATLTRACE(_T(" ****ResultNotify event: MMCN_PROPERTY_CHANGE\n"));
hr = ResultOnPropertyChange(pComp, pDO, arg, param);
} else {
hr = E_UNEXPECTED;
}
}
return hr;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ResultGetDisplayInfo(
IN CFaxComponent * pComp,
IN OUT RESULTDATAITEM __RPC_FAR *pResultDataItem)
/*++
Routine Description:
This routine dispatches result pane GetDisplayInfo requests to the appropriate handlers
in the mandatory implementations of the node.
Override this method if you want more specific behavior to a GetDisplayInfo call, otherwise
just call the mandatory methods.
Arguments:
pComp - a pointer to the IComponent associated with this node.
pResultDataItem - a pointer to the RESULTDATAITEM struct which needs to be filled in.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
NOTE:
// **********************************************************************
// **********************************************************************
// default implementation only works for ** scope folders **
// scope folders show up in the BOTH PANES
// YOU MUST OVERRIDE THIS METHOD IF YOU WANT TO DISPLAY INFO FOR
// RESULT PANE METHODS AND REMOVE THE CHECK FOR bScopeIteim == TRUE.
// **********************************************************************
// **********************************************************************
--*/
{
// DebugPrint(( TEXT("Trace: CInternalNode::ResultGetDisplayInfo") ));
assert(pResultDataItem != NULL);
if( pResultDataItem->bScopeItem == TRUE ) {
if( pResultDataItem->mask & RDI_STR ) {
if( pResultDataItem->nCol == 0 ) {
pResultDataItem->str = GetNodeDisplayName();
}
if( pResultDataItem->nCol == 1 ) {
pResultDataItem->str = GetNodeDescription();
}
}
if( pResultDataItem->mask & RDI_IMAGE ) {
pResultDataItem->nImage = GetNodeDisplayImage();
}
} else {
DebugPrint(( TEXT("******** Trace: CInternalNode::ResultGetDisplayInfo") ));
DebugPrint(( TEXT(" DID YOU FORGET TO OVERRIDE ME!!!!") ));
}
return S_OK;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ResultGetResultViewType(
IN CFaxComponent * pComp,
IN MMC_COOKIE cookie,
OUT LPOLESTR __RPC_FAR *ppViewType,
OUT long __RPC_FAR *pViewOptions)
/*++
Routine Description:
This routine dispatches result pane events to their respective handlers.
Do not override this procedure, instead override the individual event handlers
declared below.
Arguments:
pComp - a pointer to the IComponent associated with this node.
cookie - the cookie of the target node
ppViewType - returns the requested view type
pViewOptions - returns the requested view options
Return Value:
None.
--*/
{
// DebugPrint(( TEXT("Trace: CInternalNode::ResultGetResultViewType") ));
*pViewOptions = MMC_VIEW_OPTIONS_NONE; // request default view.
return S_FALSE;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ResultQueryDataObject(
IN CFaxComponent * pComp,
IN MMC_COOKIE cookie,
IN DATA_OBJECT_TYPES type,
OUT LPDATAOBJECT __RPC_FAR *ppDataObject)
/*++
Routine Description:
This routine creates and returns a IDataObject containing context information for the current node.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
cookie - the cookie of the target node
type - indicates the the node type IE scope, result, etc.
ppDataobject - store the pointer to the new data object here.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// DebugPrint(( TEXT("Trace: CInternalNode::ResultQueryDataObject") ));
// delegate to the implementation in ScopeQueryDataObject
return ScopeQueryDataObject( pComp->GetOwner(), cookie, type, ppDataObject );
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IExtendPropertySheet event handlers - default implementations
//
//
// ExtendPropertySheet event handlers - default implementations
// we need seperate versions for IComponentData and IComponent
// in your code if you want differing behavior
// in the scope and results panes.
//
// You can simply delegate one implementation to the other
// if you want the same behavior in both panes
// ***********************************************************
// IExtendPropertySheet for IComponentData
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentDataPropertySheetCreatePropertyPages(
IN CFaxComponentData * pCompData,
IN LPPROPERTYSHEETCALLBACK lpProvider,
IN LONG_PTR handle,
IN CFaxDataObject * lpIDataObject)
/*++
Routine Description:
The default implementation of this routine returns S_FALSE and does not add
any pages to the property sheet.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
lpProvider - a pointer to the IPropertySheetCallback used to insert pages
handle - a handle to route messages with
lpIDataobject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentDataPropertySheetCreatePropertyPages") ));
return S_FALSE; // no pages added
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentDataPropertySheetQueryPagesFor(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * lpDataObject)
/*++
Routine Description:
The default implementation of this routine returns S_FALSE to indicate there are no
property pages to be added to the property sheet.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
lpDataobject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentDataPropertySheetQueryPagesFor") ));
return S_FALSE; // no pages for this object
}
// ***********************************************************
// IExtendPropertySheet for IComponent
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentPropertySheetCreatePropertyPages(
IN CFaxComponent * pComp,
IN LPPROPERTYSHEETCALLBACK lpProvider,
IN LONG_PTR handle,
IN CFaxDataObject * lpIDataObject)
/*++
Routine Description:
The default implementation of this routine returns S_FALSE and does not add
any pages to the property sheet.
Arguments:
pComp - a pointer to the IComponent associated with this node.
lpProvider - a pointer to the IPropertySheetCallback used to insert pages
handle - a handle to route messages with
lpIDataobject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentPropertySheetCreatePropertyPages") ));
return S_FALSE; // no pages added
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentPropertySheetQueryPagesFor(
IN CFaxComponent * pComp,
IN CFaxDataObject * lpDataObject)
/*++
Routine Description:
The default implementation of this routine returns S_FALSE to indicate there are no
property pages to be added to the property sheet.
Arguments:
pComp - a pointer to the IComponent associated with this node.
lpDataobject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentPropertySheetQueryPagesFor") ));
return S_FALSE; // no pages for this object
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IExtendContextMenu event handlers - default implementations
//
//
// ExtendContextMenu event handlers - default implementations
// we need seperate versions for IComponentData and IComponent
// in your code if you want differing behavior
// in the scope and results panes.
//
// You can simply delegate one implementation to the other
// if you want the same behavior in both panes
// ***********************************************************
// IExtendContextMenu for IComponentData
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentDataContextMenuAddMenuItems(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * piDataObject,
IN LPCONTEXTMENUCALLBACK piCallback,
IN OUT long __RPC_FAR *pInsertionAllowed )
/*++
Routine Description:
The default implementation of this routine not add
any items to the context menu.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
piDataObject - pointer to the dataobject associated with this node
piCallback - a pointer to the IContextMenuCallback used to insert pages
pInsertionAllowed - a set of flag indicating whether insertion is allowed.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentDataContextMenuAddMenuItems") ));
return S_OK;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentDataContextMenuCommand(
IN CFaxComponentData * pCompData,
IN long lCommandID,
IN CFaxDataObject * piDataObject)
/*++
Routine Description:
The default implementation of the context menu handler does not do anything.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
lCommandID - the command ID
piDataObject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentDataContextMenuCommand") ));
return S_OK;
}
// ***********************************************************
// IExtendContextMenu for IComponent
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentContextMenuAddMenuItems(
IN CFaxComponent * pComp,
IN CFaxDataObject * piDataObject,
IN LPCONTEXTMENUCALLBACK piCallback,
IN OUT long __RPC_FAR *pInsertionAllowed)
/*++
Routine Description:
The default implementation of this routine not add
any items to the context menu.
Arguments:
pComp - a pointer to the IComponent associated with this node.
piDataObject - pointer to the dataobject associated with this node
piCallback - a pointer to the IContextMenuCallback used to insert pages
pInsertionAllowed - a set of flag indicating whether insertion is allowed.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentContextMenuAddMenuItems") ));
return S_OK;
}
HRESULT
STDMETHODCALLTYPE
CInternalNode::ComponentContextMenuCommand(
IN CFaxComponent * pComp,
IN long lCommandID,
IN CFaxDataObject * piDataObject)
/*++
Routine Description:
The default implementation of the context menu handler does not do anything.
Arguments:
pComp - a pointer to the IComponent associated with this node.
lCommandID - the command ID
piDataObject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalNode::ComponentContextMenuCommand") ));
return S_OK;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IExtendControlbar - default implementations
//
//
// if we need more events later on for the controlbar, a
// default handler MUST be added here.
//
// these are for IComponent (result pane nodes)
//
HRESULT
CInternalNode::ControlBarOnBtnClick(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM param )
/*++
Routine Description:
Handles a click on a toolbar button.
Arguments:
pComp - a pointer to the IComponent associated with this node.
lpDataObject - pointer to the dataobject associated with this node
param - the parameter for the message
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// handle a command event here
return S_OK;
}
HRESULT
CInternalNode::ControlBarOnSelect(
IN CFaxComponent* pComp,
IN LPARAM arg,
IN CFaxDataObject * lpDataObject )
/*++
Routine Description:
Add the toolbar here.
Arguments:
pComp - a pointer to the IComponent associated with this node.
arg - the parameter for the message
lpDataObject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// add and remove any custom control bars here depending on arg
// if adding the first time, don't forget to CREATE the toolbars first
// after the first time, just use attach and detach dependin on what you get for arg
// you need the pComp->m_pControlbar interface pointer to set these things up.
return S_OK;
}
//
// these are for IComponentData (scope pane nodes)
// MAY NOT WORK! (I don't use them.)
//
HRESULT
CInternalNode::ControlBarOnBtnClick2(
IN CFaxComponentData* pCompData,
IN CFaxDataObject * lpDataObject,
IN LPARAM param )
/*++
Routine Description:
Handles a click on a toolbar button.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
lpDataObject - pointer to the dataobject associated with this node
param - the parameter for the message
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// handle a command event here
return S_OK;
}
HRESULT
CInternalNode::ControlBarOnSelect2(
IN CFaxComponentData* pCompData,
IN LPARAM arg,
IN CFaxDataObject * lpDataObject )
/*++
Routine Description:
Add the toolbar here.
Arguments:
pCompData - a pointer to the IComponentData associated with this node.
arg - the parameter for the message
lpDataObject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// add and remove any custom control bars here depending on arg
// if adding the first time, don't forget to CREATE the toolbars first
// after the first time, just use attach and detach dependin on what you get for arg
// you need the pCompData->m_pControlbar interface pointer to set these things up.
return S_OK;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IDataObject special custom clipboard format handlers - default implementations
//
//
HRESULT
CInternalNode::DataObjectRegisterFormats()
/*++
Routine Description:
Register custom clipboard formats that are specific to this
node.
The default implementation does nothing.
Arguments:
None.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
return S_OK;
}
HRESULT
CInternalNode::DataObjectGetDataHere(
IN FORMATETC __RPC_FAR *pFormatEtc,
IN IStream * pstm )
/*++
Routine Description:
Handles GetDataHere for custom clipboard formats specific to this
particular node.
The default implementation asserts since there should be no unhandled
formats.
Arguments:
pFormatEtc - the FORMATETC struction indicating where and what the
client is requesting
pstm - the stream to write the data to.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
assert(FALSE);
return DV_E_FORMATETC;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Scope Pane event handlers - default implementations
//
//
// Override these methods in your descendent classes in to handle scope pane events.
// if we need more events later on for the scope pane, a
// default handler MUST be added here.
HRESULT
CInternalNode::ScopeOnExpand(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ScopeOnDelete(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ScopeOnRename(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ScopeOnPropertyChange(
IN CFaxComponentData * pCompData,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Result Pane event handlers - default implementations
//
//
// Override these methods in your descendent classes in to handle result pane events.
// if we need more events later on for the result pane, a
// default handler MUST be added here.
HRESULT
CInternalNode::ResultOnActivate(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnAddImages(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnButtonClick(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnClick(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnDoubleClick(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnDelete(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnExpand(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnMinimized(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnPropertyChange(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnQueryPaste(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnRemoveChildren(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnRename(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnSelect(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
// set the default verb to OPEN
pComp->m_pConsoleVerb->SetDefaultVerb( MMC_VERB_OPEN );
return S_FALSE;
}
HRESULT
CInternalNode::ResultOnShow(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
// note this method needs to insert the images EVERY TIME IT IS CALLED.
// if you override this method YOU MUST REMEMBER TO DO THIS OR YOUR ICONS WILL NOT SHOW UP.
HRESULT hr = S_OK;
// setup my images in the imagelist
if( arg == TRUE ) {
// showing result pane
hr = pComp->InsertIconsIntoImageList();
}
return hr;
}
HRESULT
CInternalNode::ResultOnViewChange(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg,
IN LPARAM param)
{
return S_FALSE;
}