MapControl is an engine component to create your own window to display map contents. I've looked before and never found a way to get a reference to the ArcMap MapControl. ArcMap may not even use a MapControl for its display, it may use some other internal class.
Two options:
1)
var ave = ActiveView as IActiveViewEvents;
ave.AfterDraw += onAfterDraw;
protected static void onAfterDraw( IDisplay DISPLAY, esriViewDrawPhase PHASE )
{
if( PHASE != esriViewDrawPhase.esriViewForeground ) return;
... [update coordinates]
}
You will get extra messages that aren't related to the extents changing, but if you're just using the event to update displayed coord it might be acceptable.
2) A number of classes implement ITransformEvents, but only 2 as events: TransformEventsListener (C++ helper coclass, not applicable here), and DisplayTransformation.
var te = ActiveView.ScreenDisplay.DisplayTransformation as ITransformEvents_Event
te.VisibleBoundsUpdated += onVsibleBoundsUpdated;
protected static void onVsibleBoundsUpdated( IDisplayTransformation TRANSFORMATIONmay , bool SIZECHANGED )
{
... [update coordinates]
}
I would use the onAfterDraw otherwise you may have to listen to several ITransformEvents e.g. onAfterDraw fired for pan, zoom, map rotate; onVisibleBoundsUpdated fired for pan, zoom, but NOT map rotate.
FWIW, when it's fired, onVisibleBoundsUpdated is fired before onAfterDraw.
You may also have to remove/add your handler as the active view changes. So if your using doc.ActiveView you should unhook/rehook the av events when it changes, likewise if you are using FocusMap.