为 Chris Maunder 的网格控件设置闪烁单元格
为 Chris Maunder 的网格控件创建闪烁单元格。
引言
最近的一个项目中,我需要使用 Chris Maunder 出色的网格控件,但它缺少一些非常必要的功能——闪烁一个或多个单元格的能力。本文讨论了我如何添加此功能。它归结为一个完成工作的派生类,以及一个提供计时器来打开/关闭“闪烁单元格”的线程(我不太相信WM_TIMER
)。我使用了以下两篇 CP 文章中的代码
左键单击 gadget 并拖动以移动它。左键单击 gadget 的右下角并拖动以调整其大小。右键单击 gadget 以访问其属性。
由于网格控件支持单元格颜色,我所要做的就是想出一种方法使单元格看起来像在闪烁,然后想出一种实际使其闪烁的方法。为了让它看起来像在闪烁,我想出了一个类,其中包含指定单元格的原始颜色,以及指定单元格的闪烁颜色。如何确定这些颜色完全取决于您,并且很可能与应用程序相关。对于我们的应用程序,我们希望单元格以红色背景和白色文本闪烁。
CBlinkCell 类
这个类非常简单,除了包含单元格的行、列以及原始背景色和前景色之外,没有其他内容。
CBlinkCellList 类
这个类的构造同样简单,它仅包含一个应闪烁的单元格列表。如果 CBlinkCell
项在此列表中,则 CBlinkGridCtrl
类将闪烁该单元格(由行/列数据成员指定),直到它从列表中删除。此类允许您从闪烁列表中添加和删除/删除单元格。
CBlinkGridCtrl 类
此类派生自原始 CGridCtrl
类,并且仅添加了新的闪烁功能。这样,您就可以将此类插入到继承链中的适当位置,而不会丢失您添加到网格控件(或您自己的派生类)中的任何功能。
使用 CBlinkGridCtrl 类
只需从 CBlinkGridCtrl
派生您自己的网格控件。之后,启动闪烁线程(您可以从派生的网格控件中执行)以及编写代码以打开和关闭所需单元格的闪烁就变得很简单了。
注释
我将示例应用程序中使用的网格控件的资源 ID 放入文件 Constants.h 中。这也是可以找到闪烁计时器用户定义消息的地方。
功劳归于应得的人
非常感谢 Chris Maunder 编写原始 CGridCtrl
代码。我们目前在一个跟踪患者在创伤中心接受服务的应用程序中使用该代码。
我使用的线程类最初由 Dominik Filipp 编写。这是 CP 上的一篇旧文章(来自 1999 年),但它工作得非常好。我也在我的许多应用程序中使用他的线程类。
这两篇文章的链接都在文章的开头提供。