使用 WTL 的条形图控件






3.72/5 (7投票s)
用于图形绘制的条形图控件的简单实现
引言
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日 - 初始发布。
免责声明
本软件及其附带的文件按“原样”分发,不提供任何形式的保证,无论是明示的还是暗示的。对于可能造成的任何损害,概不负责。用户必须承担使用本软件的全部风险。