向“添加新项”对话框添加项

将项添加到 “添加新项 ”对话框的过程从注册表项开始。 如以下注册表项所示,AddItemTemplates 节包含目录的路径和名称,其中放置了“添加新项”对话框中提供的项。

注意

紧接在代码段后面的表包含有关注册表项的其他信息。

本部分位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0Exp\Projects

第一个 GUID 是此类型的项目的 CLSID;第二个 GUID 指示“添加项”模板的已注册项目类型:

\{C061DB26-5833-11D2-96F5-000000000000}\AddItemTemplates\TemplatesDir\{ACEF4EB2-57CF-11D2-96F4-000000000000}\1

@ = #6

TemplatesDir = \<Visual Studio SDK 安装路径>\VSIntegration\<SomeFolder>\<SomePackage>\SomeProject>\<<SomeProjectItems>

SortPriority = dword:00000064

名称 类型 数据(来自 .rgs 文件) 说明
@ (默认值) REG_SZ #%IDS_ADDITEM_TEMPLATES_ENTRY% 添加项模板的资源 ID
Val TemplatesDir REG_SZ %TEMPLATE_PATH%\<SomeProjectItems> 在“添加新项”向导的对话框中显示的项目项的路径。
Val SortPriority REG_DWORD 100 (x64) 确定“添加新项”对话框中显示的文件树节点中的排序顺序。

注意

Visual C# 和 Visual Basic 项目类型的 GUIDS 如下所示:

  • Visual C#: {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
  • Visual Basic: {F184B08F-C81C-45F6-A57F-5ABD9991F28F}

TemplatesDir 列出的目录是 %TEMPLATE_PATH%\<SomeProjectItems>,是“添加新项”对话框树左侧的节点。 树中的其他元素基于该根目录中的子目录。 可用于添加到项目的文件是“添加新项”对话框右窗格中的项。

通常,此文件夹将包含项目的模板文件,例如模板 HTML 或 .cpp 文件,以及用于启动向导的任何 .vsz 文件。 若要控制项的显示方式,还可以包含 用于本地化目录名称和图标的 .vsdir 文件。 本地化字符串是显示在对话框中的描述文字,表示“添加新项”对话框树中的此节点。

但是,不必在一个 .vsdir 文件中拥有所有内容。 目录中每个项都可以有一个 .vsdir 文件。 有关详细信息,请参阅 Wizard (.vsz) 文件和模板目录说明 (.vsdir) 文件

注意

模板目录中的 .vsdir 文件是可选的。 如果只想将项目元素放在目录中并在“添加新项”对话框中显示它,可以将该文件放在 TemplatesDir 语句中指定的模板目录中。 然后,该文件将显示在该项目的 “添加新项 ”对话框的右窗格中。 但是,如果要显示文件的本地化描述文字或图标,则必须在模板目录中至少包含一个 .vsdir 文件。

对项目项进行分组

如果要在“添加新项”对话框树的文件夹中包含模板组,则必须在根模板目录下包含包含项的子目录。 向用户显示“添加新项”对话框时,他们还会看到子文件夹,并且能够从中选择项目元素。

代码段中的排序优先级确定相对于树节点的其他元素在树中创建此模板目录的位置。 对于“添加新项”对话框,排序优先级是必须包含的一切,以便项目将显示在对话框中的正确位置。

还可以实现接口IVsFilterAddProjectItemDlg2来筛选“添加新项”对话框中显示的内容。 通过实现此接口,可以在包含 50 个模板和向导文件的磁盘上设置一个模板目录。 这样一来,可以具有属于一个项目类型的 20 个不同项目类型、属于另一个项目类型的其他 30 个文件以及常规类型项目中的所有可用文件。 通过这种方式,根据创建的项目模板,可以显示一组不同的模板文件。

例如,在 Visual Basic 项目中,可能具有 Web 项目和客户端项目。 Web 窗体不可用于添加到客户端项目中的项,Windows 窗体不可用于添加到 Web 服务器项目。 因此,可以创建一个模板目录,其中包含这两种类型的项目的所有文件。 然后,通过实现 IVsFilterAddProjectItemDlg2,可以隐藏不应基于项目中的项目或项目设置的类型显示的项目。

筛选项目项

IVsFilterAddProjectItemDlg2 提供以下方法筛选树(左窗格)和项目文件(右窗格)中的元素:

  • 由本地化名称(描述文字显示在 .vsdir 文件中包含的对话框中)提供。IVsFilterAddProjectItemDlg

  • 按磁盘上文件和文件夹的实际名称(未本地化 - 无 .vsdir 文件)提供 IVsFilterAddProjectItemDlg

  • 按类别,由 IVsFilterAddProjectItemDlg2.

    若要按类别进行筛选,请为 .vsdir 文件中的项提供类别字符串,例如 Visual Basic 中的 Web 窗体客户端项 然后,对话框代码从 .vsdir 文件中检索类别分类,并将其传递给你。 然后,可以将该信息传递给实现, IVsFilterAddProjectItemDlg2 以便按类别筛选“ 添加新项 ”对话框。 还可以筛选网页的项目,也可以作为客户端 Win32 应用程序案例进行筛选。 此外,还可以将 Visual C++ 标记的项标识为 Microsoft 基础类(MFC)或活动模板库 (ATL) 项。 标识这些项时,项目系统可以定义自己的分类,以便可以根据类别和分类筛选系统。

    如果实现此筛选器功能,则无需映射应隐藏的每个项的表。 只需将项分类为类型,并将分类 放入 .vsdir 文件或文件中。 然后,可以通过实现接口来隐藏具有特定分类的任何项。 这样,就可以根据项目中的状态使“添加新项”对话框中的项动态。