学习ArcObjects 帮助 .NET遇到问题(七)创建可停靠窗口

一、 关键步骤
  1. 添加新建项(Base Command),名称:LoggingDockableWindowCommand.cs,主要功能打开LoggingDockableWindow的窗口。在OnCreate创建,在Onclick显示。主要代码如下:

     private void SetupDockableWindow()
            {
                if (m_dockableWindow == null)
                {
                    IDockableWindowManager dockWindowManager = m_application as IDockableWindowManager;
                    if (dockWindowManager != null)
                    {
                        UID windowID = new UIDClass();
                        windowID.Value = DockableWindowGuid;
                        m_dockableWindow = dockWindowManager.GetDockableWindow(windowID);
                    }
                }
            }
    
  2. 添加新建项(Dockable Window(Desktop)),名称LoggingDockableWindow.cs,设计窗体,特别是ContextMenuStrip控件(ctxMenuStrip)。在lstPendingMessage_MouseUp中选择radDynamic时,创建ICommandBars,添加ClearLoggingCommand和LogLineMultiItemCmd,选择predefined,创建context menu,添加LoggingWindowCtxMnu。

     if (radDynamic.Checked) //Create context menu dynamically
                    {
                        //Disadvantage(s): 
                        //1. ICommandBars.Create will set document to dirty
                        //2. Cannot insert separator
                        ctxMenu = documentBars.Create("DockableWindowCtxTemp", esriCmdBarType.esriCmdBarTypeShortcutMenu); //This sets document flag to dirty :(
    
                        //Add commands to context menu
                        UID cmdID = new UIDClass();
                        object idx = Type.Missing;
    
                        cmdID.Value = "{b5820a63-e3d4-42a1-91c5-d90eacc3985b}"; //ClearLoggingCommand
                        ctxMenu.Add(cmdID, ref idx);
    
                        cmdID.Value = "{21532172-bc21-43eb-a2ad-bb6c333eff5e}"; //LogLineMultiItemCmd
                        ctxMenu.Add(cmdID, ref idx);
                    }
                    else    //Use predefined context menu
                    {
                        UID menuID = new UIDClass();
                        menuID.Value = "{c6238198-5a2a-4fe8-bff0-e2f574f6a6cf}"; //LoggingWindowCtxMnu
                        ICommandItem locateMenu = documentBars.Find(menuID, false, false);
                        if (locateMenu != null)
                            ctxMenu = locateMenu as ICommandBar;
                    }
    
    1. ClearLoggingCommand.cs、LogLineMultiItemCmd.cs和LoggingWindowCtxMnu.cs代码部分在LoggingDockableWindow.cs中体现,略。

    2. 成果
      在这里插入图片描述

二、主要接口和类说明
  1. IDockableWindow接口(Framework)
    提供对定义和控制可停靠窗口的成员的访问。方法IsVisible指示此停靠窗口是否可见;Show隐藏或显示可停靠窗口。

  2. IDockableWindowManager 接口(Framework)
    提供对在应用程序中查找可停靠窗口的方法的访问。GetDockableWindow(uid) 查找可停靠窗口,首先在集合中查找,然后在类别中查找。

  3. IDocument 接口 (Framework)

    提供对文档中其他对象的访问。使用 IDocument 接口可以访问文档的标题、类型、快捷键表、命令栏集合、父应用程序和 Visual Basic 项目。使用 IApplication:😄 ocument 获取对文档的引用。

  4. ICommandBars 接口(Framework)

    提供对处理命令栏集合的成员的访问。CommandBars 是文档可用的所有工具栏的集合。ICommandBars 接口允许您设置所有命令栏的属性,以及创建、查找或隐藏命令栏。使用 IDocument::CommandBars 获取对 commandbars 集合的引用。Create方法,创建新的空白工具栏或快捷菜单。

  • 35
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值