1. 程式人生 > >ArcGIS Engine 修改 PageLayout 中地圖比例尺時出現的Bug解決辦法

ArcGIS Engine 修改 PageLayout 中地圖比例尺時出現的Bug解決辦法

原文地址:https://gis.stackexchange.com/questions/9943/mapscale-not-being-persisted-properly-in-mxd-when-programmatically-changed-outsi?answertab=votes#tab-top

當想要修改 PageLayout 中的地圖的比例尺時,一般都會想到修改 IMap 的 MapScale 屬性。確實在 ArcMap 的控制元件中修改是可以生效的,但是在 AE 中修改時卻不會生效。答主提出的辦法有效的解決了這個問題。

[DllImport("User32.dll")]
public static extern int GetDesktopWindow(); 

private IMapDocument mapDocument = null;

private void ChangeMapScale()
{
    mapDocument.Open(@"C:\Temp\foo.mxd", null);

    IPageLayout pageLayout = mapDocument.PageLayout;
    IActiveView activeView = (IActiveView)pageLayout;
    IMap map = activeView.FocusMap;

    activeView = (IActiveView)mapDocument.PageLayout;
    activeView.Activate(GetDesktopWindow()); // 注意,呼叫了這個函式,才使得設定 MapScale 生效

    map.MapScale = value;
    activeView.Refresh();

    mapDocument.Save(true, true);
}