65.9K
CodeProject 正在变化。 阅读更多。
Home

类似 Visual Studio 2005 的界面

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (160投票s)

2006年6月3日

CPOL

4分钟阅读

viewsIcon

1126185

downloadIcon

11014

使用 Extender 类,为 DockPanel Suite 应用一个类似 Visual Studio 2005 的主题。

Sample Image - DockPanelSkin.png

概述

自 Opera、Firefox 等软件引入 MDI 标签页界面以来已经过去一段时间了。不幸的是,很少有免费组件能让 .NET 开发者创建这样的界面。我在网上搜索了很长时间,才发现了 DockPanel Suite,这是 Weifen Luo 开发的一个出色且完全可定制的组件。该组件可在 Sourceforge 上找到,在此处

引言

本文展示了如何通过实现一个 Extender 类来定制 DockPanel 组件。附带的示例为 DockPanel 的 1.0 版本创建了一个类似 Visual Studio 2005 的界面。

Copyright

Weifen Luo 拥有 DockPanel Suite(包括本文所述的 Extender 类)的版权。

背景

本文基于 DockPanel Suite 库,需要至少对其有基本了解。请参阅“参考文献”部分以获取更多信息。此外,还需要对 System.Drawing 类和函数有良好掌握。

Extender 类

DockPanel 通过五个类接受定制

  • AutoHideTab 表示内容处于自动隐藏状态时使用的单个标签。
  • AutoHideStrip 在内容处于自动隐藏状态时绘制标签条和标签。
  • DockPaneCaption 在内容为工具窗口时绘制标题窗格。
  • DockPaneTab 表示内容为文档窗口或工具窗口时使用的单个标签。
  • DockPaneStrip 在内容为文档窗口或工具窗口时绘制标签条和标签。

为方便起见,这些类包含在一个 Extender 类中。以下各节将描述组件部分以及您可以定制的相对模块。

AutoHideStrip 和 AutoHideTab

自动隐藏标签条可以出现在主窗体的四个边缘,并通过 MouseOver 事件激活。只有当至少有一个内容处于自动隐藏状态时,标签条才会显示。当标签停靠在左侧或右侧时,产生的标签会旋转 90 度。

以下是停靠在顶部的窗体的屏幕截图

这是另一个停靠在底部的窗体的示例

标签条和标签的绘制由 AutoHideStripFromBase 类完成。主要的绘制方法如下:

  • OnPaint 处理控件的 OnPaint 事件。
  • DrawTabStrip 绘制具有右侧方向的标签条以及所有包含的标签。
  • DrawTab 绘制单个标签。

DockPaneCaption

DockPaneCaption 表示窗体停靠时的边框,通常包含标题、关闭按钮和设置为自动隐藏状态的按钮。类似 Visual Studio 2005 的界面还包含一个通过上下文菜单操作窗体状态的按钮。

以下是 DockPaneCaption 的屏幕截图

标题的绘制由 DockPaneCaptionFromBase 类完成。主要的绘制方法如下:

  • OnPaint 处理控件的 OnPaint 事件。
  • DrawCaption 绘制背景和标题文本。

DockPaneStrip 和 DockPaneTab

DockPaneStrip 表示内容为工具窗口或文档时显示的标签区域。两者在标签形状和其他行为方面有许多不同之处。一个例子是在只有一个内容时隐藏标签条。标签条和标签的绘制由 DockPaneStripFromBase 类完成。以下示例将阐明这些差异。

显示文档标签的标签条示例

显示带有图标和溢出符号的文档标签的标签条示例

显示工具窗口标签的标签条示例

文档标签条的绘制方法如下:

  • OnPaint 处理控件的 OnPaint 事件。
  • DrawTabStrip_Document 绘制背景。
  • DrawTab_Document 绘制形状、图标和文本。

工具窗口标签条的绘制方法如下:

  • OnPaint 处理控件的 OnPaint 事件。
  • DrawTabStrip_ToolWindow 绘制背景。
  • DrawTab_ToolWindow 绘制形状、图标和文本。

Using the Code

要将 Extender 应用于 DockPanel 的实例,请在窗体的 Form_Load 事件中插入以下代码,并将控件名称替换为您自己的名称。

Extender.SetSchema(DockPanel1, Extender.Schema.FromBase)

最终注释

希望您觉得本文有用。如果您觉得本文愚蠢、令人讨厌或不准确,请根据您的判断对文章进行评分。最后,随时欢迎您通过提出改进建议或提交代码或其他材料来自由地为本项目做出贡献。

致谢

感谢 Weifen Luo 为社区提供 DockPanel 组件。如果您喜欢此组件,可以 在此处向 Weifen Luo 捐款。

参考文献

历史

  • 2006 年 6 月 3 日:首次提交
  • 2006 年 7 月 20 日:bug 修复(无需设置 MdiParent 属性)
  • 2007 年 1 月 22 日:更新了下载内容
© . All rights reserved.