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

195 lines
5.2 KiB
C++

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
faxcconbar.cpp
Abstract:
This file contains my implementation of IExtendControlbar for IComponent.
Environment:
WIN32 User Mode
Author:
Darwin Ouyang (t-darouy) 30-Sept-1997
--*/
// faxconbar.cpp : Implementation of CFaxExtendControlbar
#include "stdafx.h"
#include "faxcconbar.h"
#include "faxadmin.h"
#include "faxsnapin.h"
#include "faxcomp.h"
#include "faxcompd.h"
#include "faxdataobj.h"
#include "faxhelper.h"
#include "faxstrt.h"
#include "iroot.h"
#pragma hdrstop
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// CFaxComponentExtendContextMenu - IExtendContextMenu implementation for IComponent
//
//
HRESULT
STDMETHODCALLTYPE
CFaxComponentExtendControlbar::SetControlbar(
IN LPCONTROLBAR pControlbar)
/*++
Routine Description:
Stores the LPCONTROLBAR sent to the snapin.
Arguments:
pControlbar - the LPCONTROLBAR to be set.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CFaxComponentExtendControlbar::SetControlbar") ));
assert(m_pFaxComponent != NULL );
if( m_pFaxComponent == NULL ) {
return E_UNEXPECTED;
}
if( pControlbar == NULL ) {
DebugPrint(( TEXT(" ********************* FREE Controlbar") ));
if( m_pFaxComponent->m_pControlbar != NULL ) {
m_pFaxComponent->m_pControlbar->Release();
m_pFaxComponent->m_pControlbar = NULL;
}
} else {
DebugPrint(( TEXT(" ********************* SET Controlbar") ));
// should only be called once??
assert( m_pFaxComponent->m_pControlbar == NULL );
m_pFaxComponent->m_pControlbar = pControlbar;
m_pFaxComponent->m_pControlbar->AddRef();
}
return S_OK;
}
HRESULT
STDMETHODCALLTYPE
CFaxComponentExtendControlbar::ControlbarNotify(
IN MMC_NOTIFY_TYPE event,
IN LPARAM arg,
IN LPARAM param)
/*++
Routine Description:
Dispatch the ControbarNotify call to the correct node by extracting the
cookie from the DataObject.
Arguments:
event - the event type.
arg, param - the arguments of the event.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CFaxComponentExtendControlbar::ControlbarNotify") ));
CFaxDataObject * myDataObject = NULL;
LONG_PTR cookie = NULL;
HRESULT hr;
if( event == MMCN_BTN_CLICK ) {
ATLTRACE(_T("CFaxComponentExtendControlbar::ControlbarNotify: MMCN_BTN_CLICK\n"));
assert( arg != NULL );
if( arg == NULL ) {
return E_POINTER;
}
myDataObject = ::ExtractOwnDataObject( (LPDATAOBJECT)arg );
assert( myDataObject != NULL );
if( myDataObject == NULL ) {
return E_UNEXPECTED;
}
cookie = myDataObject->GetCookie();
if( cookie == NULL ) {
// root
hr = m_pFaxComponent->pOwner->globalRoot->ControlBarOnBtnClick( m_pFaxComponent, myDataObject, param );
} else {
// child
try {
hr = ((CInternalNode *)cookie)->ControlBarOnBtnClick( m_pFaxComponent, myDataObject, param );
} catch ( ... ) {
DebugPrint(( TEXT("Invalid Cookie: 0x%08x"), cookie ));
assert( FALSE ); // got passed an INVALID COOKIE!?!?!?!?
hr = E_UNEXPECTED;
}
}
} else if( event == MMCN_SELECT ) {
ATLTRACE(_T("CFaxComponentExtendControlbar::ControlbarNotify: MMCN_SELECT\n"));
assert( param != NULL );
if( param == NULL ) {
return E_POINTER;
}
#ifdef DEBUG
if( HIWORD( arg ) == TRUE ) {
DebugPrint(( TEXT(" +++++++++++ ControlbarNotify Select") ));
} else {
DebugPrint(( TEXT(" ----------- ControlbarNotify DESelect") ));
}
#endif
myDataObject = ::ExtractOwnDataObject( (LPDATAOBJECT)param );
assert( myDataObject != NULL );
if( myDataObject == NULL ) {
return E_UNEXPECTED;
}
cookie = myDataObject->GetCookie();
if( cookie == NULL ) {
// root
hr = m_pFaxComponent->pOwner->globalRoot->ControlBarOnSelect( m_pFaxComponent, arg, myDataObject );
} else {
// child
try {
hr = ((CInternalNode *)cookie)->ControlBarOnSelect( m_pFaxComponent, arg, myDataObject );
} catch ( ... ) {
DebugPrint(( TEXT("Invalid Cookie: 0x%08x"), cookie ));
assert( FALSE ); // got passed an INVALID COOKIE!?!?!?!?
hr = E_UNEXPECTED;
}
}
}
return hr;
}