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

C2DPushGraph: 推送图控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (34投票s)

2005年4月25日

5分钟阅读

viewsIcon

136939

downloadIcon

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`。
© . All rights reserved.