C2DPushGraph: 推送图控件






4.64/5 (34投票s)
2005年4月25日
5分钟阅读

136939

3893
一个推送图表控件,类似于 Microsoft 任务管理器中的图表控件。
引言
在我过去的编程经验中,我经常希望在图表中显示和监控某个操作的速率或性能。无论是写入操作的速率还是每秒提取的内容结果数量,我都一直认为一个类似于 Windows XP 任务管理器(Ctrl+Alt+Delete)性能和网络选项卡中的图表会非常有用。在 Google 上快速搜索图表控件克隆无果后,我决定自己克隆它会是一次有趣且有益的经历。
随着时间的推移,克隆控件被证明很容易,我决定添加更多功能,并使其在几乎所有方面都可以完全自定义。最终,当一切尘埃落定,我面对着本文围绕的控件。它看起来和行为令人惊讶地漂亮,尽管开发得如此仓促。但谁关心它的过去,让我们继续看看如何轻松实现它…
使用代码
如果你们中有读过我上一篇文章(CGoogle)的,你们会知道我正在用一种新的风格来写我的文章。我将尝试更快速地提供关键信息,而不是喋喋不休地谈论某个特性。
将控件添加到对话框
有两种方法可以将控件添加到对话框,一种是政治上正确的做法,另一种是简单的方法。
如果你正在寻找简单的方法,首先在对话框中添加一个静态控件(我通常使用图片控件作为边框)。然后,为新创建的控件设置所需的样式和唯一的 ID。之后,你应该将控件定位并拉伸到你想要图表显示的位置。现在,在对话框类中添加一个新的变量,类型为 `C2DPushGraph`。最后,在 `OnInitDialog` 中调用 `CreateFromStatic`,并将控件 ID 作为第一个参数,父窗口作为第二个参数(如果你在父对话框类中调用 `CreateFromStatic`,可以使用 `'this'` 指针)。
政治上正确的方法涉及使用资源编辑器中的自定义控件项,并将 `C2DPushGraph` 指定为类名。从那里,你可以像对待任何自定义控件一样进行操作。
设置图表范围
在继续之前,你应该设置图表的范围。范围是可能的最小和最大幅度(例如,CPU 使用率图表可能最小为 0,最大为 100)。要设置范围,你可以使用以下一个或多个函数:`SetMaxPeek`、`SetMinPeek` 或 `SetPeekRange`。
添加新线
`C2DPushGraph` 的两个最重要部分显然是能够添加新线以及用新数据更新该线。所以我们将从添加线开始。要添加新线,你需要调用 `AddLine`,它的原型如下:`AddLine(UINT uiLineID, COLORREF crColor)`。第一个参数是线的唯一 ID,这是你稍后用来指示正在更改特定线的标识。第二个参数是线的颜色。我强烈建议使用预处理器定义或命名常量作为你的线 ID,这会让事情变得容易得多。
将新点推送到线
与典型的图表不同,要为线添加新点,你只需要提供点的幅度或 Y 坐标。每个幅度都应该是你图表范围内的数字,尽管如果它大于或小于当前的最小和最大范围值,它将被调整到最近的有效数字。要将新点推送到线,你需要调用 `Push`,它的原型如下:`Push(int nMagnitude, UINT uiLineID)`。
你会注意到,在将新幅度推送到线后,图表不会改变。这是因为你必须首先将所需的幅度推送到任意数量的线,然后调用 `Update()`。
自定义图表的视觉外观
在列出用于设置和检索图表视觉外观的函数之前,这里有一个快速的图示,展示了图表控件的最基本属性。
可用于设置属性的函数
C2DPushGraph::SetBGColor
void SetBGColor( COLORREF crColor )
crColor
:新的背景颜色。
C2DPushGraph::SetGridColor
void SetGridColor( COLORREF crColor )
crColor
:新的网格颜色。
C2DPushGraph::SetGridSize
void SetGridSize( unsigned short usWidthAndHeight )
usWidthAndHeight
:每个网格单位的宽度/高度(以像素为单位)。
C2DPushGraph::SetInterval
void SetInterval( unsigned short usInterval )
usInterval
:每个幅度点之间的距离(以像素为单位)。
C2DPushGraph::SetLabelForMax
void SetLabelForMax( LPCTSTR lpszLabel )
lpszLabel
:用于标记图表最大幅度的 C 字符串。
C2DPushGraph::SetLabelForMin
void SetLabelForMin( LPCTSTR lpszLabel )
lpszLabel
:用于标记图表最小幅度的 C 字符串。
C2DPushGraph::SetLineColor
bool SetLineColor( COLORREF crColor, UINT uiLineID )
crColor
:线的新颜色。uiLineID
:线的 ID。
C2DPushGraph::SetTextColor
void SetTextColor( COLORREF crColor )
crColor
:最小和最大标签的新颜色。
C2DPushGraph::ShowAsBar
bool ShowAsBar( UINT uiLineID, bool bAsBar )
UiLineID
:线的 ID。bAsBar
:如果希望该线以条形图格式显示,则为 true;否则为 false。
C2DPushGraph::ShowGrid
void ShowGrid( bool bShow = true)
bShow
:如果显示网格,则为 true;否则为 false。
C2DPushGraph::ShowLabels
void ShowLabels( bool bShow = true)
bShow
:如果显示最小和最大标签,则为 true;否则为 false。
可用于检索属性的函数
C2DPushGraph::GetBGColor
COLORREF GetBGColor() const
C2DPushGraph::GetGridColor
COLORREF GetGridColor() const
C2DPushGraph::GetGridSize
int GetGridSize() const
C2DPushGraph::GetInterval
unsigned short GetInterval() const
C2DPushGraph::GetLabelForMax
LPCTSTR GetLabelForMax() const
C2DPushGraph::GetLabelForMin
LPCTSTR GetLabelForMin() const
C2DPushGraph::GetLineColor
COLORREF GetLineColor( UINT uiLineID )
UiLineID
:线的 ID。
C2DPushGraph::GetMaxPeek
int GetMaxPeek() const
C2DPushGraph::GetMinPeek
int GetMinPeek() const
C2DPushGraph::GetTextColor
COLORREF GetTextColor() const
联系作者
Stuart Konen 电子邮件地址:skonen@gmail.com
快速问候:我目前正在寻找工作,并接受合同。
历史
- 2005年4月14日 - 开始开发 `C2DPushGraph`。
- 2005年4月20日 - 向 The Code Project 提交了 `C2DPushGraph`。