博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ChartCtrl源码剖析之——CChartGrid类
阅读量:4603 次
发布时间:2019-06-09

本文共 2696 字,大约阅读时间需要 8 分钟。

CChartGrid类用来绘制波形区域中的表格,当绘制波形时波形就显示在这些表格上面。它处于该控件的区域,如下图所示: 

CChartGrid类的头文件。

#if !defined(AFX_CHARTGRID_H__ECCBEFF4_2365_49CD_A865_F1B4DD8CA138__INCLUDED_)#define AFX_CHARTGRID_H__ECCBEFF4_2365_49CD_A865_F1B4DD8CA138__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "ChartObject.h"#include 
class CChartAxis;class CChartGrid : public CChartObject { friend CChartAxis;public: CChartGrid(CChartCtrl* pParent, bool bHoriz); virtual ~CChartGrid();private: void Draw(CDC* pDC); void AddTick(int Position); void ClearTicks(); std::list
m_vecTickPos; bool m_bIsHorizontal;};#endif // !defined(AFX_CHARTGRID_H__ECCBEFF4_2365_49CD_A865_F1B4DD8CA138__INCLUDED_)

CChartGrid类的源文件。

#include "stdafx.h"#include "ChartGrid.h"#include "ChartAxis.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endifusing namespace std;//// Construction/Destruction//CChartGrid::CChartGrid(CChartCtrl* pParent, bool bHoriz)  : CChartObject(pParent), m_bIsHorizontal(bHoriz), m_vecTickPos(){    m_ObjectColor = RGB(128,128,128);}CChartGrid::~CChartGrid(){}void CChartGrid::AddTick(int Position){    m_vecTickPos.push_back(Position);}void CChartGrid::ClearTicks(){    m_vecTickPos.clear();}void CChartGrid::Draw(CDC *pDC){    if (!m_bIsVisible)        return;    if (!pDC->GetSafeHdc() )        return;    CPen* pOldPen;    CPen NewPen(PS_SOLID,0,m_ObjectColor);    pOldPen = pDC->SelectObject(&NewPen);    list
::iterator iter = m_vecTickPos.begin(); int ActuPosition = 0; for (iter; iter!=m_vecTickPos.end(); iter++) { ActuPosition = *iter; if (!m_bIsHorizontal) { int ActuX = m_ObjectRect.left; while (true) { if (!Clip(ActuX,ActuPosition)) break; pDC->MoveTo(ActuX,ActuPosition); ActuX += 3; Clip(ActuX,ActuPosition); pDC->LineTo(ActuX,ActuPosition); ActuX += 3; } } else { int ActuY = m_ObjectRect.bottom; while (true) { if (!Clip(ActuPosition,ActuY)) break; pDC->MoveTo(ActuPosition,ActuY); ActuY -= 3; Clip(ActuPosition,ActuY); pDC->LineTo(ActuPosition,ActuY); ActuY -= 3; } } } pDC->SelectObject(pOldPen); DeleteObject(NewPen);}

这里简单说一下,m_bIsHorizontal用来表示轴的水平与垂直,一开始对这个地方的理解有偏差,当为垂直轴的时候死活没办法理解为什么要累加ActuX的值,因为这明明是横向的嘛。后来意识到绘制的是跟纵轴相关的时候,这个地方就特别好理解了。 

 

转载于:https://www.cnblogs.com/wolfmvp/p/7207149.html

你可能感兴趣的文章
markdown
查看>>
【leetcode】107-Binary Tree Level Order Traversal II
查看>>
Jquert data方法获取不到数据,显示为undefined。
查看>>
ssm项目中 数据库和资源的备份
查看>>
hdoj5671 BestCoder Round #81 (div.2)
查看>>
HDU5950【矩阵快速幂】
查看>>
在线C++编译器
查看>>
C#中各种serialization的比较
查看>>
P2617 Dynamic Rankings
查看>>
工作学习常识1
查看>>
Linux小知识点
查看>>
VisualVM监控远程主机
查看>>
C#中检查网络是否连通的二种方法
查看>>
节假日设置
查看>>
网络游戏_客户端
查看>>
Tomcat8 配置APR模式
查看>>
<五>初探opengl,编写我们的镜头
查看>>
大数据操作:删除和去重
查看>>
《那些年啊,那些事——一个程序员的奋斗史》——28
查看>>
2、JDBC-CURD
查看>>