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

使用 WTL 的条形图控件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.72/5 (7投票s)

2004年6月3日

CPOL

2分钟阅读

viewsIcon

61234

downloadIcon

761

用于图形绘制的条形图控件的简单实现

引言

WTL 包含许多控件类,提供标准的界面元素。你可以对这些控件进行子类化或超类化,以修改它们的默认外观和行为。但有时,提供的控件可能没有你的应用程序所需要的特性。解决方案是实现你自己的自定义控件。

本文介绍两个自定义控件。第一个控件是一个图例,设计用于地图、图表或绘图的图例中,以解释图表中每个部分的含义。图例控件只是在文本字符串左侧绘制的一个小方框。该方框用画笔填充,并被一个1像素宽的边框包围。

第二个控件是一个条形图控件。它在左侧和底部显示两条轴,轴之间显示许多垂直条,每个条用特定的画笔填充,并代表特定的值。

使用代码

为了使用这些控件,应该将以下文件包含在你的项目中

  • Bargraph.h
  • Bargraph.cpp
  • Legend.h
  • Legend.cpp
  • Colors.h
程序员必须通过定义一个 LOGBRUSH 结构来告诉条形图控件使用哪个画笔,以及为图中的每个条使用哪个值。程序员还必须告诉条形图控件整个图的高度(以单位为准),以确定图中条的比例。

以下代码片段演示了如何使用图例和条形图控件

// Declare the variables


CBargraph m_wndBargraph;    // bargraph control

CLegend m_arLegend[NUM_BARS];  // array of legend controls

LOGBRUSH arLB[] = 
{
  { BS_HATCHED, RGB(0, 255, 255), HS_HORIZONTAL },
  { BS_HATCHED, RGB(255, 0, 255), HS_FDIAGONAL },
  { BS_HATCHED, RGB(255, 0, 0), HS_DIAGCROSS },
  { BS_HATCHED, RGB(0, 255, 0), HS_CROSS },
  { BS_HATCHED, RGB(0, 0, 255), HS_BDIAGONAL }
};

TCHAR * arLegendText[] = 
{
  _T("First legend box"),
  _T("Second legend box"),
  _T("Third legend box"),
  _T("Fouth legend box"),
  _T("Fifth legend box"),
  _T('\0')
};
    
// Subclass the static control and attach it to the CBargraph object

BOOL bRet = m_wndBargraph.SubclassWindow(GetDlgItem(IDC_BARGRAPH));
ATLASSERT(bRet);
m_wndBargraph.SetBargraphHeight(BARGRAPH_HEIGHT);

for (int i = 0; i < NUM_BARS; i++)
{
  // Subclass the static controls and attach it to the CLegend objects

  bRet = m_arLegend[i].SubclassWindow(GetDlgItem(FIRST_LEGEND + i));
  ATLASSERT(bRet);
  m_arLegend[i].SetLegendBoxHeight(20);
  m_arLegend[i].SetLegendBoxWidth(20);
  m_arLegend[i].SetLegendLogBrush(arLB[i]);
  m_arLegend[i].SetLegendText(arLegendText[i]);

  m_wndBargraph.AddBar(i, FIRST_BAR_HEIGHT + (i * 10), arLB[i]);
}    

致谢

一些想法来自 J. Richter 的书《Windows 95:开发者指南》

历史

  • 2004年5月30日 - 初始发布。

免责声明

本软件及其附带的文件按“原样”分发,不提供任何形式的保证,无论是明示的还是暗示的。对于可能造成的任何损害,概不负责。用户必须承担使用本软件的全部风险。

© . All rights reserved.