一、 关键步骤
-
添加新建项(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); } } }
-
添加新建项(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; }
-
ClearLoggingCommand.cs、LogLineMultiItemCmd.cs和LoggingWindowCtxMnu.cs代码部分在LoggingDockableWindow.cs中体现,略。
-
成果
-
二、主要接口和类说明
-
IDockableWindow接口(Framework)
提供对定义和控制可停靠窗口的成员的访问。方法IsVisible指示此停靠窗口是否可见;Show隐藏或显示可停靠窗口。 -
IDockableWindowManager 接口(Framework)
提供对在应用程序中查找可停靠窗口的方法的访问。GetDockableWindow(uid) 查找可停靠窗口,首先在集合中查找,然后在类别中查找。 -
IDocument 接口 (Framework)
提供对文档中其他对象的访问。使用 IDocument 接口可以访问文档的标题、类型、快捷键表、命令栏集合、父应用程序和 Visual Basic 项目。使用 IApplication:😄 ocument 获取对文档的引用。
-
ICommandBars 接口(Framework)
提供对处理命令栏集合的成员的访问。CommandBars 是文档可用的所有工具栏的集合。ICommandBars 接口允许您设置所有命令栏的属性,以及创建、查找或隐藏命令栏。使用 IDocument::CommandBars 获取对 commandbars 集合的引用。Create方法,创建新的空白工具栏或快捷菜单。