18.04.2015 Views

ArcGIS Engine Developer Guide

ArcGIS Engine Developer Guide

ArcGIS Engine Developer Guide

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

BUILDING APPLICATIONS WITH C++ AND CONTROL WIDGETS<br />

IEventListenerHelperPtr g_ipTOCControlEventHelper;<br />

TransformEvents* g_transEvents;<br />

IEventListenerHelperPtr g_ipTransEventHelper;<br />

…<br />

int main (int argc, char* argv[])<br />

{<br />

…<br />

g_ipTOCControlEventHelper->AdviseEvents(g_ipTOCControl, NULL);<br />

g_transEvents = new TransformEvents();<br />

g_ipTransEventHelper.CreateInstance(CLSID_TransformEventsListener);<br />

g_ipTransEventHelper->Startup(<br />

static_cast (g_transEvents));<br />

…<br />

}<br />

9. You need to trap for the TransformEvents from the PageLayoutControlEvents<br />

OnPageLayoutReplaced event.<br />

a. To do this PageLayoutControlEvents will need to know about<br />

g_ipTransEventHelper, so declare it with extern in<br />

PageLayoutControlEvents.h.<br />

extern IEnvelopePtr g_ipCurrentExtent;<br />

extern IEventListenerHelperPtr g_ipTransEventHelper;<br />

b. Now advise the events in OnPageLayoutReplaced:<br />

void PageLayoutControlEvents::OnPageLayoutReplaced(VARIANT newPageLayout)<br />

{<br />

// Get the extent of the PageLayout's focus map<br />

IActiveViewPtr ipActiveView;<br />

g_ipPageLayoutControl->get_ActiveView(&ipActiveView);<br />

IMapPtr ipFocusMap;<br />

ipActiveView->get_FocusMap(&ipFocusMap);<br />

IActiveViewPtr ipMapActiveView = ipFocusMap;<br />

ipMapActiveView->get_Extent(&g_ipCurrentExtent);<br />

// Trap focus map's ITransformEvents<br />

IScreenDisplayPtr ipScreenDisp;<br />

ipMapActiveView->get_ScreenDisplay(&ipScreenDisp);<br />

IDisplayTransformationPtr ipDisplayTrans;<br />

ipScreenDisp->get_DisplayTransformation(&ipDisplayTrans);<br />

CComBSTR bsGUID;<br />

::StringFromIID(IID_ITransformEvents, &bsGUID);<br />

IUIDPtr ipUID(CLSID_UID);<br />

ipUID->put_Value(CComVariant(bsGUID));<br />

g_ipTransEventHelper->AdviseEvents(ipDisplayTrans, ipUID);<br />

// Load the same pre-authored map document into the MapControl<br />

…<br />

}<br />

Chapter 6 • <strong>Developer</strong> scenarios • 387

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!