Spring Computing Windows 控件






4.27/5 (4投票s)
2001年9月28日
4分钟阅读

87445

2003
一组 Win32 Windows 控件。
引言
出于好奇,我最近非常想了解更多关于 Windows 控件的信息。在收集了各种文档并得到了其他开发者的帮助后,我决定自己动手尝试。
我的辛勤工作的成果最初发布在我如今已不复存在的关于“标题栏 Windows 控件”的文章中,当时在这里 CodeProject。本文档取代并增强了当时所说的一切。
本文档提供的是原始的 Win32 控件,而不是 ActiveX 控件。我提供了包装类供你在 WTL 应用程序中使用,并期望对这些控件感兴趣的人将来能提供 MFC 包装类。
我编写这些控件是为了满足我对 Windows 开发的好奇心,以及因为我觉得 WTL 领域在 UI 方面还有提升的空间。这些控件将与 CodeProject 上其他控件一起出现,填补空白。
目前,springctrls.dll 的 1.2 版本实现了以下 Windows 控件:
如何使用这些控件
要使用这些控件,你需要包含 springctrls.h 头文件,并将你的应用程序与 springctl32.lib 导入库链接。控件本身实现在 springctl32.dll 动态链接库中。
在使用任何涉及 Windows 控件的函数之前,应用程序需要使用 ::InitWindowsControls()
函数注册各种窗口类。此函数不接受任何参数,成功时返回非零值,否则返回零。
Win32 方式
Windows 控件无非就是一个自定义窗口,它响应一组特定的消息。应用程序通常通过一系列 ::SendMessage()
调用来处理 Windows 控件,以执行特定任务。
在应用程序可以与 Windows 控件交互之前,必须注册控件窗口类(如本节开头所述),并且必须使用 ::CreateWindowEx()
API 创建控件本身。
WTL 方式
本文档附带的代码提供了一组包装类,供你在 WTL 应用程序中使用。使用这些包装器比显式创建和发送适当的消息给控件要容易得多。
atlspctl.h 头文件包含 Windows 控件本身的定义。你可以像使用 WTL 提供的任何其他通用控件包装类一样,使用 CShortcutCtrl
和 CCaptionBarCtrl
类的方法。
CaptionBar
控件需要更仔细地使用。与标准的 ToolBar
、StatusBar
和 ReBar
通用控件一样,CaptionBar
控件会定位在其父窗口的客户区的顶部。因此,应用程序必须管理剩余空间中子窗口的位置和大小。atlspctlw.h 头文件提供了一个额外的 CCaptionBarWindowImpl
模板,以帮助你高效地使用此控件。
Spring Computing Windows 控件
快捷控件
快捷控件充当子窗口的容器。应用程序将子窗口(通常是其他控件)分配给快捷控件窗格。快捷控件包含一个或多个窗格,每个窗格都可以有一个文本标签和一个子窗口。快捷控件窗格不能包含多个子窗口。
一个快捷控件一次只显示一个窗格。当选择不同的窗格时,快捷控件会管理其子窗口的大小和位置。
下图显示了一个带有三个窗格的快捷控件。
标题栏控件
标题栏控件是水平窗口,定位在其父窗口的客户区的顶部。标题栏可以显示文本和位图的组合。
标题栏控件的标题文本可以创建为“静态”、“按钮”或“切换按钮”。
以下动画显示了一个在“静态”和“切换按钮”模式之间切换的标题栏控件,并在右侧对齐一个图标。
致谢
尽管这些控件是从头开始编写的,但我参考了各种来源的信息和示例代码来帮助我。
这个控件得益于 Tim Tabor 的精彩帮助。Tim 在 ATL Mailing List
和 WTL Mailing List
上非常活跃,并且乐于回答我的一些愚蠢问题!
快捷控件的灵感来自于 Christopher Brown 的 CWndSliderView
以及 Rashid Thada 的 Outlook Bar Control and Frame
。
我希望这些控件能有所帮助。当然,编写它们是一项令人兴奋而又美好的挑战。我希望随着时间的推移添加越来越多的控件,并欢迎任何建议。当然,如果你写了一段代码想作为“Windows 控件”发表,我们可以把它变成一个完整的项目,为什么不呢?而且,请随时给我任何建议来改进本文档。