langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:3791回复:6

[求助]MapControl和PageLayoutControl同步的问题

楼主#
更多 发布于:2007-07-01 20:33
<P>哪位高人做过Mapcontrol和PageLayoutControl同步显示啊?具体说就是像ArcMap里那样当MapControl里的图层内容发生变化时PageLayoutControl里的图层内容也跟着同步变化,请高手赐教多谢了.</P>
喜欢0 评分0
小波变换
路人甲
路人甲
  • 注册日期2007-06-20
  • 发帖数64
  • QQ
  • 铜币58枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
********************************** 喜欢有激情的生活 msn:hou.jiazte@hotmail.com 欢迎交流 **********************************
举报 回复(0) 喜欢(0)     评分
zengnjin1985090
路人甲
路人甲
  • 注册日期2006-12-02
  • 发帖数26
  • QQ
  • 铜币43枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-07-16 20:41
   原理上就是这样的.还可以定义一个IMapDocument公共变量,由mapcontrol和pagelayout共用.
举报 回复(0) 喜欢(0)     评分
langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-07-17 13:01
<P>多谢了</P>
举报 回复(0) 喜欢(0)     评分
zhaojie2008
路人甲
路人甲
  • 注册日期2007-06-04
  • 发帖数30
  • QQ
  • 铜币21枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-07-17 18:59
举报 回复(0) 喜欢(0)     评分
langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-07-19 08:56
3楼的兄弟,我试了你的办法的确好用。可是mapcontrol里面的地图显示范围一直和pagelayoutcontrol里面的page一样大小怎么也改变不了,不知你遇到过这种问题没有。
举报 回复(0) 喜欢(0)     评分
生在初夏
路人甲
路人甲
  • 注册日期2008-08-14
  • 发帖数6
  • QQ
  • 铜币118枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部