一、关键步骤
1. 分别创建命令类(Base Command)和工具类(Base Tool)。
2. 创建子类型命令或工具时,实现简单的 ICommandSubType 接口会更容易。
public sealed class ZoomInCommands : BaseCommand, ICommandSubType
public sealed class PolyFeedbackTools : BaseTool, ICommandSubType
3.ICommandSubType 接口包含两个方法 - GetCount 和 SetSubType。
GetCount通过返回此类包含的命令数。
ICommandSubType 中最重要的方法是 SetSubType。将为每个必需项创建子类型命令或工具的单独实例,并在实例化后设置其子类型。任何实例的子类型在实例的整个生命周期内都保持不变,但因实例而异。将传递给 SetSubType 的值另存为成员变量,以便可以相应地完成 ICommand 和 ITool 的成员。
4.设置命令或工具属性。使用 case 语句确定要查询的子类型;除此之外,像完成任何其他命令一样完成成员。
public void SetSubType(int SubType)
{
//Set up bitmap, caption, tooltip etc.
if (base.Bitmap == 0)
{
switch (SubType)
{
case 1:
base.m_bitmap = Properties.Resources.FeedBack3;
break;
case 2:
base.m_bitmap = Properties.Resources.FeedBack4;
break;
case 3:
base.m_bitmap = Properties.Resources.FeedBack5;
break;
}
}
base.m_name = string.Format("CSNETSamples_SubTypeTool{0}", SubType);
m_maxSides = SubType + 2; //3, 4 or 5 sides
base.m_caption = string.Format("{0} sides feedback (C#)", m_maxSides);
base.m_toolTip = string.Format("{0} sides feedback", m_maxSides);
base.m_message = string.Format("Tool demonstrating {0} sides polygon feedback", m_maxSides);
}
5.完成命令或工具的其他成员。通常,无论子类型如何,都可以对 OnCreate 方法进行编码。
6. 对于命令,请按当前子类型处理 OnClick 方法。对于工具OnMouseDown、OnMouseMove。
二、主要接口和类说明
- INewPolygonFeedback接口(Display)
提供对控制新面显示反馈的成员的访问。NewPolygonFeedback 的使用和行为类似于 NewLineFeedback;但是,显示和返回的几何图形是闭合多边形。这意味着当调用 Stop 时,起点将再次添加为终点,从而关闭形状。反馈中至少应添加三点。在使用 Start 添加第一个点后,必须至少调用 AddPoint 两次;否则返回 Null 值。成员有Display 反馈对象将使用的显示;Start 在给定点开始正常反馈;AddPoint 在给定点创建节点; MoveTo移动到新点;Stop停止反馈并返回形状。
IArea接口(Geometry)
提供对返回环和面共有属性的成员的访问。使用 IArea 接口获取几何体的面积。它还可用于获取几何图形的质心点和标签点。
ICommandBar接口(Framework)
提供对修改命令栏的成员的访问。CommandBar 是应用程序中的工具栏、菜单栏、菜单或上下文菜单。使用 ICommandBar 接口将命令、菜单或宏项添加到现有命令栏。还可以使用此界面在应用程序中放置命令栏。方法有Find在此命令栏上查找命令。
ICommandItem接口(Framework)
提供对定义命令项的成员的访问。CommandItem 是命令栏上的任何项。例如,显示在命令栏上的按钮、工具和菜单项都是命令项。ICommandItem 接口允许您获取或设置命令项的属性,例如标题、按钮图像、状态栏消息、工具提示、显示样式、帮助上下文 ID 等。ICommandItem 接口还提供了用于执行、删除、刷新和重置命令项的方法。使用 ICommandBars::Find、ICommandBar::Find 或 ICommandBar::Item 获取对特定命令项的引用。方法有Execute 使命令执行。