• ArcGIS Engine开发之旅03--ArcGIS Engine中的控件


    制图控件,
    如MapControl、PageLayoutControl,其中MapControl控件主要用于地理数据的显示和分析,PageLayoutControl用于生成一幅成品地图。MapControl封装了Map对象,而PageLayoutControl则封装了PageLayout对象。这两个控件都实现了IMxContents接口,因此不仅可以读取ArcMap创建的地图文档,而且可以将自身的地图内容写到一个新的地图文档中。
    三维控件,
    如GlobeControl、SceneControl都具有导航功能,允许终端用户操作三维视图,而不必使用控件命令或自定义命令。通过设置Navigate属性,用户就可以操作三维视图,如前后左右移动、放大缩小等。
    框架控件,
    如TOCControl、ToolbarControl,需要与其他的控件协作使用。例如在TOCControl控件属性页中设置与MapControl关联,单在MapControl中删除一个图层时,该图层也从TOCControl中删除。

    1、制图控件介绍 

    MapControl控件封装了Map对象,并提供了其他的属性、方法和事件,用于管理控件的外观、显示属性和地图属性,管理、添加数据图层,装载地图文档,显示、绘制跟踪图层。MapControl上存在着诸如TrackRectangle、TrackPolygon、TrackLine和TrackCircle等帮助方法,用于追踪或“橡皮圈住(rubber banding)”显示上的几何图形(Shape)。VisibleRegion属性可用于更改MapControl显示区内的几何图形。MapControl控件实现的主要接口有IMapControlDefault、IMapControl2、IMapControl3、IMapControlEvents2等,如图2-1所示。

    1.1 IMapControlDefault接口
    IMapControlDefault接口是地图控件缺省接口。当将MapControl控件拖放到容器上时,会自动创建一个axMapControl1的对象,该对象全部继承父类接口的属性和方法。下面的代码演示了如何使用这个接口。

    IMapControlDefault mapControlDefault;
    MapControl mapControl;
    mapControl = axMapControl1.object as IMapControlDefault;

    1.2 IMapControl2接口

    IMapControl2接口提供了一系列的属性和方法,如设置控件外观,设置Map对象或控件的显示属性,添加和管理数据图层、地图文档,在控件上绘制图形和返回几何对象等,如图2-2所示。

    1.3 IMapControl3接口
    该接口继承自IMapControl2,并增加了8个属性和一个方法。
    CustomProperty:设置自定义控件属性。
    DocumentFilename:返回MapControl装入的地图文档的文件名。
    DocumentMap:返回MapControl最后装入的地图名称。
    KyeIntercept:返回或设置MapControl截取键盘按键信息。
    Object:返回MapControl控件。

    IMapControl2 mapControl2;
    mapControl2 = axMapControl1.Object as IMapControl2;

    mapControl2 = axMapControl1.GetOcx() as IMapControl2;
    IMapControl3 mapControl3;
    mapControl3 = axMapControl1.Object as IMapControl3;
    mapControl3 = axMapControl1.GetOcx() as IMapControl3;

    ShowMapTips:确定是否显示地图的Map Tips。
    TipDelay:设置Map Tips的延迟时间。
    TipStyle:设置Map Tips的显示样式。
    SuppressResizeDrawing():当控件尺寸发生变化时阻止数据实时重绘。

    1.4 IMapControlEvents2接口

    IMapControlEvents2定义了MapControl能够处理的全部事件,如图2-3所示。其中,OnBeforeScreenDraw事件是屏幕绘制前触发的事件,OnViewRefreshed是视频刷新触发事件。

     2、页面布局控件

    PageLayoutControl控件主要用于页面布局与制图。该控件封装了PageLayout类,提供了布局视图中控制元素的属性和方法,以及其他的事件、属性和方法。
    Printer属性提供了处理地图打印的设置。
    Page属性提供了处理控件的页面效果。
    Element属性则用于管理控件中的地图元素。
    PageLayoutControl控件不能添加地图图层或地理数据,必须通过使用MXD文件来加载需要处理的数据。PageLayoutControl控件主要实现IPageLayoutControlDefault、IPageLayoutControl、IPageLayoutControl2、IPageLayoutControlevents等接口,

    2.1 IPageLayoutControlDefault接口

    IPageLayoutControlDefault是界面调用的默认接口。该接口是纯接口,因此可以在新版本中使用。接口的方法和属性都是相同的最高版本的主界面上的PageLayoutControl,例如IPageLayoutControlDefault相当于IPageLayoutControl2,但在以后的新版本中可能成为IPageLayoutControl3。通过使用IPageLayoutControlDefault接口,可以保证使用的PageLayoutControl是最新版本。

    2.2 IPageLayoutControlevents接口

    3、框架控件介绍

    3.1 图层树控件——TOCControl
         TOCControl是用来管理图层的可见性和标签的编辑。TOCControl需要一个“伙伴控件”(buddyControl),或实现了IActiveView接口的对象协同工作。“伙伴控件”可以是MapControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl。“伙伴控件”可以通过TOCControl属性页设置,或者在驻留TOCControl的容器被显示时用SetBuddyControl方法通过编程设置。TOCControl的每个“伙伴控件”都实现了ITOCBuddy接口。TOCControl用“伙伴控件”来显示其地图、图层和符号体系内容的一个交互树视图,并保持其内容与“伙伴控件”同步。TOCControl通过ITOCBuddy接口来访问其“伙伴控件”。

        TOCControl的主要接口有两个,一个是ITOCControl,一个是ITOCControlEvents。ITOCControl接口是任何与TOCControl有关的任务的出发点,如设置控件的外观、设置“伙伴控件”、管理图层的可见性和标签的编辑等。ITOCControlEvents是一个事件接口,它定义了TOCControl能够处理的全部事件,如OnMouseDown、OnMouseMove、OnMouseUp等,这些事件在构建独立应用程序中经常使用,如OnBeginLabelEdit、OnEndLabelEdit分别是TOCControl中的标签开始编辑、结束编辑时触发。

    3.2 工具栏控件——ToolbarControl

    ToolbarControl包括6个对象及相关接口:ToolbarControl、ToolbarItem、ToolbarMenu、CustomizeDialog、MissingCommand。ToolbarControl要与一个“伙伴控件”协同工作,通过ToolbarControl属性页设置,或者在驻留ToolbarControl的容器被显示时用SetBuddyControl方法通过编程设置。
    ToolbarControl的每个“伙伴控件”都实现了IToolbarBuddy接口,这个接口用于设置“伙伴控件”的CurrentTool属性。如通过设置MapControl作为其“伙伴控件”,当用户单击该ToolbarControl上的“拉框放大”工具时,该放大工具就会成为MapControl的
    CurrentTool。放大工具的实现过程是:通过ToolbarControl获取其“伙伴控件”,然后在MapControl上提供显示终端用户拉动鼠标所画的框,并改变MapControl的显示范围。
    ToolbarControl一般要与一个“伙伴控件”协同工作,并有一个控件命令选择集,以便快速提供功能强大的GIS应用程序。ToolbarControl不仅提供了部分用户界面,而且还提供了部分应用程序框架。ArcGIS Desktop应用程序,如ArcMap、ArcGlobe和ArcScene等具有强大而灵活的框架,包括诸如工具条、命令、菜单、泊靠窗口和状态条等用户界面组件,这些框架使终端用户可以通过改变位置、添加和删除这些用户界面组件来定制应用程序。
    ArcGIS Engine提供了几套使用ArcGIS控件的命令,以便执
    行某种特定动作,开发人员可通过创建执行特定任务的定制命令来扩展这套控件命令。所有的命令对象都实现了ICommand接口,ToolbarControl在适当的时候要使用该接口来调用方法和访问属性。在命令对象被驻留到ToolbarControl后,就会立即调用ICommand::OnCreate方法,这个方法将一个句柄(Handle)或钩子(hook)传递给该命令操作的应用程序。命令的实现一般都要经过测试,以查看该钩子(hook)对象是否被支持,如果不支持则该钩子自动失效,如果支持,命令则存储该钩子以便以后使用。ToolbarControl使用钩子(hook)来联系命令对象和“伙伴控件”,并提供了属性、方法和事件用于管理控件的外观,设置伙伴控件,添加、删除命令项,设置当前工具等。ToolbarControl的主要接口有:IToolbarControl、IToolbarControlDefault、IToolbarControlEvents。
    (1)IToolbarControl:该接口是任何与ToolbarControl有关的任务的出发点,如设置“伙伴控件”的外观,添加或去除命令、工具、菜单等。
    (2)IToolbarControlDefault:该接口是自动暴露的缺省的dispatch接口,该接口的属性和方法与ToolbarControl的最高版本主接口的属性、方法相同。例如目前版本中的IToolbarControlDefault等同于IToolbarControl,但在今后的新版本中,可能会变为IToolbarControl2。在开发中使用IToolbarControlDefault接口,能够保证总是访问到最新版本的ToolbarControl。
    (3)IToolbarControlEvents:该接口是一个事件接口,定义了ToolbarControl能够处理的全部事件,如OnDoubleClick、OnItemClick、OnKeyDown等。

    在ToolbarControl上可以驻留以下3类命令。
    (1)实现了响应单击事件的ICommand接口的单击命令。用户单击事件,会导致ICommand::OnClick方法的调用,并执行某种动作。通过改变ICommand::Checked属性的值,简单命令项的行为就像开关那样。单击命令可以驻留在菜单中的唯一命令类型。
    (2)实现了ICommand接口和ITool接口、需要终端用户与“伙伴控件”的显示进行交互的工具。ToolbarControl维护CurrentTool属性。当终端用户单击ToolbarControl上的工具时,该工具就成为CurrentTool。ToolbarControl会设置“伙伴控件”的CurrentTool属性。当某个工具为CurrentTool时,该工具会从“伙伴控件”收到鼠标和键盘事件。
    (3)实现ICommand接口和IToolControl接口的工具控件。
    这通常是用户界面组件。ToolbarControl驻留了来自IToolControl:hWnd属性窗口句柄提供的一个小窗口,只能向ToolbarControl添加特定工具控件的一个例程。


    可以使用3种方法向ToolbarControl添加命令,第1种是指定唯一识别命令的一个UID,第2种是指定一个progID,第3种是给AddToolbarDef方法提供某个现有命令对象的一个例程。下面给出样例代码:
    //Add a toolbardef by passing a UID
    UID uID = new UIDsClass();
    uID.Value = “esriControls.ControlsMapNavigationToolbar”;
    axToolbarControl1.AddToolbarDef(uID, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
    //Add a toolbar def by passing a ProgID
    string progID = “esriControls.ControlsMapNavigationToolbar”;
    等属性同步。改变UpdateInterval属性可以更改更axToolbarControl1.AddToolbarDef(progID, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
    //Add a toolbardef by passing an IToolbarDef
    IToolBarDef toolBarDef = new ControlsMapNavigationToolbarClass();
    axToolbarControl1.AddToolbarDef(toolBarDef, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);

    ToolbarControl更新命令的使用。默认情况下,ToolbarControl每半秒钟自动更新一次,以确保驻留在ToolbarControl上的每个工具条命令项的外观与底层命令的Enabled、Bitmap、Caption新频率。UpdateInterval为0会停止任何自动发生的更新,可以通过编程调用Update方法以刷新每个工具条命令项的状态。
    在应用程序中首次调用Update方法时,ToolbarControl会检查每个工具条命令项的底层命令的ICommand::OnCreate方法是否已经被调用过,如果还没有调用过该方法,该ToolbarCommand将作为钩子被自动传递给ICommand::OnCreate方法。

  • 相关阅读:
    hihoCoder#1037 : 数字三角形(DP)
    Android安全机制
    Java五道输出易错题解析(进来挑战下)
    【Mail】JavaMail介绍及发送邮件(一)
    【Mail】搭建邮件服务器(LAMP+Postfix+Dovcot+PostfixAdmin+Roundcubemail)
    【Mail】telnet收发邮件过程
    【Mail】邮件的基础知识和原理
    【Java】JavaWeb权限管理
    【Java】JDBC连接数据库
    【Mysql】权限管理
  • 原文地址:https://www.cnblogs.com/CSharpLover/p/5728508.html
Copyright © 2020-2023  润新知