195 lines
5.2 KiB
C++
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;
|
|
}
|
|
|