阅读:3974回复:6
[求助]MapControl和PageLayoutControl同步的问题
<P>哪位高人做过Mapcontrol和PageLayoutControl同步显示啊?具体说就是像ArcMap里那样当MapControl里的图层内容发生变化时PageLayoutControl里的图层内容也跟着同步变化,请高手赐教多谢了.</P>
|
|
1楼#
发布于:2007-07-02 16:11
<P>下面是一些VB.NET的代码,不知道是不是适合楼主: </P>
<P> Private m_Envelope As IEnvelope<BR> Private m_dblWidth As Double<BR> Private m_dblHeight As Double<BR> Private m_pMap As IMap<BR> Private FX_LayerOutToolBar As FXHS_MapOp.PageLayoutToolBar<BR> Private m_pPageLayeroutCtrl As IPageLayoutControl<BR> Private Xmin, Xmax, Ymin, Ymax As Double<BR> Private m_pDisplayTransformation As IDisplayTransformation<BR> Private m_pBorder As IBorder<BR> Private m_OriFrameEnvlope As IEnvelope<BR> Private m_OriPageWidth, m_OriPageHeight As Double<BR></P> <P>m_pPageLayeroutCtrl = Me.FXPageLayerOut.Object<BR> Dim pObjectCopy As IObjectCopy<BR> pObjectCopy = New ObjectCopy</P> <P> '得到地图的拷贝<BR> Dim pCopiedMap As Object<BR> pCopiedMap = pObjectCopy.Copy(pMapCtrl.Map)<BR> m_pMap = pMapCtrl.Map<BR> Dim m_pDisplayTransformation As IDisplayTransformation<BR> '地图重画<BR> Dim pToOverwriteMap As IMap<BR> pToOverwriteMap = FXPageLayerOut.ActiveView.FocusMap<BR> pObjectCopy.Overwrite(pCopiedMap, pToOverwriteMap)</P> <P> Dim pActiveView As IActiveView<BR> pActiveView = FXPageLayerOut.ActiveView.FocusMap<BR> m_pDisplayTransformation = pActiveView.ScreenDisplay.DisplayTransformation<BR> m_pDisplayTransformation.VisibleBounds = pMapCtrl.ActiveView.Extent<BR> m_Envelope = pMapCtrl.ActiveView.Extent</P> <P> m_pPageLayeroutCtrl.Page.QuerySize(m_OriPageWidth, m_OriPageHeight)<BR> pActiveView.Refresh()</P> |
|
|
2楼#
发布于:2007-07-16 20:41
原理上就是这样的.还可以定义一个IMapDocument公共变量,由mapcontrol和pagelayout共用.
|
|
3楼#
发布于:2007-07-17 13:01
<P>多谢了</P>
|
|
4楼#
发布于:2007-07-17 18:59
顶
|
|
5楼#
发布于:2007-07-19 08:56
3楼的兄弟,我试了你的办法的确好用。可是mapcontrol里面的地图显示范围一直和pagelayoutcontrol里面的page一样大小怎么也改变不了,不知你遇到过这种问题没有。
|
|
6楼#
发布于:2008-08-27 10:09
[分享]
<P>我刚刚做过,代码给你,你看看行不行:</P>
<P>Private Sub AxMapControl1_OnAfterScreenDraw(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvent) Handles AxMapControl1.OnAfterScreenDraw<BR> Dim pObjectCopy As IObjectCopy<BR> pObjectCopy = New ObjectCopy<BR> '被拷贝目标地图对象<BR> Dim pToCopyMap As IMap<BR> pToCopyMap = AxMapControl1.ActiveView.FocusMap</P> <P> '拷贝的对象<BR> Dim pCopiedMap As Object<BR> pCopiedMap = pObjectCopy.Copy(pToCopyMap)<BR> '得到数据将被放置控件的地图对象<BR> Dim pToOverwriteMap As Object<BR> pToOverwriteMap = AxPageLayoutControl1.ActiveView.FocusMap</P> <P> '传递数据<BR> pObjectCopy.Overwrite(pCopiedMap, pToOverwriteMap)<BR> '控件视图重绘<BR> AxPageLayoutControl1.Refresh()<BR> End Sub</P> <P>该代码来源于:arcobject开发基础与技巧(武汉大学出版社)仅供个人参考学习,交流之用</P> |
|