progID = \ m_ToolbarMenu.AddItem(progID, -1, -1, false,
esriCommandStyles.esriCommandStyleIconAndText);
progID = \ m_ToolbarMenu.AddItem(progID, -1, -1, true,
esriCommandStyles.esriCommandStyleIconAndText);
progID = \ m_ToolbarMenu.AddItem(progID, -1, -1, false,
esriCommandStyles.esriCommandStyleIconAndText);
// 设置与PageLayoutControl挂接
m_ToolbarMenu.SetHook(axPageLayoutControl1);
// 后面是加载图形文档的代码?? // ??
3. 在设计模式显示窗体并从属性窗口中选择axPageLayoutControl1,显示axPageLayoutControl事件。双击
OnMouseDown事件,向代码窗口中增加事件处理代码。 4. 在axPageLayoutControl1_OnMouseDown事件中增加如下代码:
private void axPageLayoutControl1_OnMouseDown(object sender,
ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnMouseDownEvent e)
{
// 弹出ToolbarMenu if ( e.button == 2) {
m_ToolbarMenu.PopupMenu(e.x, e.y, axPageLayoutControl1.hWnd);
} }
5. 生成并运行应用程序。在PageLayoutControl的显示区域单击右键以显示弹出菜单,并为页面布局导航。
(八) 在TOCControl中控制标签编辑
TOCControl默认允许用户自动地切换图层的可见性并改变显示在目录表中的名称。你可以增加代码防止用户在编辑名称时输入空的字符串。
1. 在Form_Load事件的开始增加下列代码。
private void Form1_Load(object sender, System.EventArgs e) {
// 当缩放时禁止重绘
this.SetStyle(ControlStyles.EnableNotifyMessage, true); // 设置标签编辑为手动方式
axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual;
// 后面是加载文档代码 // ??
2. 在设计模式显示窗体并从属性窗口选择AxTOCControl1控件,显示AxTOCControl事件。双击OnEndLabelEdit
向代码窗口添加事件处理函数。
3. 在axTOCControl1_OnEndLabelEdit事件中添加以下代码:
private void axTOCControl1_OnEndLabelEdit(object sender, ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnEndLabelEditEvent e) {
// 禁止在编辑标签时键入空字串 string newLabel = e.newLabel; if ( newLabel.Trim() == \ {
e.canEdit = false;
}
}
4. 生成并生成应用程序。编辑TOCControl控件的地图、图层、标题或图例类的标签,在其上点击一次,然后再点一次调用标签编辑。试
着用空字串替代标签。在编辑期间,你可以随时使用键盘上的ESC键取消编辑。
(九) 在MapControl上绘制图形
你可以将MapControl作为缩略图窗体使用,并在其上绘制显示PageLayoutControl内的焦点地图的当前范围。当你浏览PageLayoutControl数据框架内的数据时,你将看到缩略图窗口也进行了更新。
注:使用地图导航工具导航焦点图(活动图)将改变PageLayoutControl中焦点地图的范围并引起MapControl更新。使用页面布局工具导航页面布局将改变页面布局的范围(不是PageLayoutControl中的焦点图的范围),而MapControl将不更新。
1. 向类中增加下列成员变量:
public class Form1 : System.Windows.Forms.Form {
private ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;
private ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControl axPageLayoutControl1; private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;
private ESRI.ArcGIS.ToolbarControl.AxToolbarControl axToolbarControl1; private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass(); // 弹出式菜单 private IEnvelope m_Envelope; // MapControl绘制的范围
private Object m_FillSymbol; // 在MapControl上绘制范围使用的符号 private ITransformEvents_VisibleBoundsUpdatedEventHandler
// PageLayoutControl的焦点图事件
visBoundsUpdatedE;
注:声明的变量visBoundsUpdatedE是一个托管。托管是一个类,它能够拥有对指定方法的引用,并使它链接到一个特定的事件。在事件和方法之间的链接过程有时在.NET中被称作wiring。
2. 创建一个叫CreateOverviewSymbol的新函数。这个函数是创建你将在MapControl中使用的符号的地方,此符号
是用来描述PageLayoutControl焦点地图数据范围的。函数中增加的代码如下:
private void CreateOverviewSymbol() {
// 获取IRGBColor接口
IRgbColor color = new RgbColor();
// 设置颜色属性 color.RGB = 255; // 获取ILine符号接口
ILineSymbol outline = new SimpleLineSymbol(); // 设置线符号属性 outline.Width = 1.5; outline.Color = color; // 获取IFillSymbol接口
ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); // 设置填充符号属性
simpleFillSymbol.Outline = outline;
simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;
m_FillSymbol = simpleFillSymbol; }
3. 从Form_Load事件在TOCControl标签编辑代码之前调用CreateOverviewSymbol函数。
private void Form1_Load(object sender, System.EventArgs e) {
// 当缩放时禁止重绘
this.SetStyle(ControlStyles.EnableNotifyMessage, true);