ChartCtrl源码剖析之——CChartAxisLabel类
CChartAxisLabel类用来绘制轴标签,上、下、左、右都可以根据实际需要设置对应的轴标签。它处于该控件的区域,如下图所示:

CChartAxisLabel类的头文件。
#if !defined(AFX_CHARTAXISLABEL_H__0E5519C8_A2F4_4CED_9681_32A56B25D0C5__INCLUDED_)
#define AFX_CHARTAXISLABEL_H__0E5519C8_A2F4_4CED_9681_32A56B25D0C5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ChartObject.h"
#include "ChartString.h"
class CChartAxis;
class CChartAxisLabel : public CChartObject
{
friend CChartAxis;
public:
void SetText(const TChartString& NewText);
TChartString GetText() const { return m_strLabelText; }
void SetFont(int nPointSize, const TChartString& strFaceName);
CChartAxisLabel(CChartCtrl* pParent, bool bHorizontal);
virtual ~CChartAxisLabel();
private:
void SetPosition(int LeftBorder, int TopBorder, CDC *pDC);
void Draw(CDC* pDC);
CSize GetSize(CDC* pDC) const;
bool m_bIsHorizontal; // Specifies if the axis is horizontal or not
int m_iFontSize;
TChartString m_strFontName;
TChartString m_strLabelText;
};
#endif // !defined(AFX_CHARTAXISLABEL_H__0E5519C8_A2F4_4CED_9681_32A56B25D0C5__INCLUDED_)
CChartAxisLabel类的源文件。
#include "stdafx.h"
#include "ChartAxisLabel.h"
#include "ChartCtrl.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CChartAxisLabel::CChartAxisLabel(CChartCtrl* pParent, bool bHorizontal):CChartObject(pParent)
{
m_bIsHorizontal = bHorizontal;
m_iFontSize = ;
m_strFontName = _T("Microsoft Sans Serif");
m_strLabelText = _T("");
}
CChartAxisLabel::~CChartAxisLabel()
{
}
void CChartAxisLabel::SetText(const TChartString& NewText)
{
m_strLabelText = NewText;
m_pParent->RefreshCtrl();
}
void CChartAxisLabel::SetFont(int nPointSize, const TChartString& strFaceName)
{
m_iFontSize = nPointSize;
m_strFontName = strFaceName;
m_pParent->RefreshCtrl();
}
CSize CChartAxisLabel::GetSize(CDC *pDC) const
{
CSize LabelSize;
LabelSize.cx = ;
LabelSize.cy = ;
if (!m_bIsVisible)
return LabelSize;
if (!pDC->GetSafeHdc())
return LabelSize;
if (m_strLabelText == _T(""))
return LabelSize;
CFont NewFont;
CFont* pOldFont;
NewFont.CreatePointFont(m_iFontSize,m_strFontName.c_str(),pDC);
pOldFont = pDC->SelectObject(&NewFont);
LabelSize = pDC->GetTextExtent(m_strLabelText.c_str());
LabelSize.cx += ;
LabelSize.cy += ;
if (!m_bIsHorizontal)
{
int Width = LabelSize.cy;
int Height = LabelSize.cx;
LabelSize.cx = Width;
LabelSize.cy = Height;
}
pDC->SelectObject(pOldFont);
DeleteObject(NewFont);
return LabelSize;
}
void CChartAxisLabel::Draw(CDC *pDC)
{
if (!m_bIsVisible)
return;
if (!pDC->GetSafeHdc())
return;
if (m_strLabelText == _T(""))
return;
int iPrevMode = pDC->SetBkMode(TRANSPARENT);
COLORREF OldColor = pDC->SetTextColor(m_ObjectColor);
CFont NewFont;
NewFont.CreatePointFont(m_iFontSize,m_strFontName.c_str(),pDC);
CFont* pOldFont;
if (!m_bIsHorizontal)
{
LOGFONT LogFont;
NewFont.GetLogFont(&LogFont);
LogFont.lfOrientation = ;
LogFont.lfEscapement = ;
CFont VertFont;
VertFont.CreateFontIndirect(&LogFont);
pOldFont = pDC->SelectObject(&VertFont);
pDC->ExtTextOut(m_ObjectRect.left + ,m_ObjectRect.top,
ETO_CLIPPED,NULL,m_strLabelText.c_str(),NULL);
pDC->SelectObject(pOldFont);
DeleteObject(VertFont);
DeleteObject(NewFont);
}
else
{
pOldFont = pDC->SelectObject(&NewFont);
pDC->ExtTextOut(m_ObjectRect.left,m_ObjectRect.top + ,
ETO_CLIPPED,NULL,m_strLabelText.c_str(),NULL);
pDC->SelectObject(pOldFont);
DeleteObject(NewFont);
}
pDC->SetBkMode(iPrevMode);
pDC->SetTextColor(OldColor);
}
void CChartAxisLabel::SetPosition(int LeftBorder, int TopBorder, CDC *pDC)
{
CSize NewSize = GetSize(pDC);
CRect NewRect;
NewRect.top = TopBorder;
NewRect.bottom = TopBorder + NewSize.cy;
NewRect.left = LeftBorder;
NewRect.right = LeftBorder + NewSize.cx;
CChartObject::SetRect(NewRect);
}
CChartAxisLabel类在CChartAxis类中设定最终绘制的位置。
ChartCtrl源码剖析之——CChartAxisLabel类的更多相关文章
- ChartCtrl源码剖析之——CChartObject类
首先,做一些简单的铺垫,目前针对ChartCtrl源码的剖析只针对V.15版本.名义上说是剖析,倒不如说是记录下自己针对该控件的理解,非常感谢Cedric Moonen大神,一切的功劳与掌声都该赠予给 ...
- ChartCtrl源码剖析之——CChartAxis类
CChartAxis类用来绘制波形控件的坐标轴,这个源码相对较复杂,当初阅读的时候耗费了不少精力来理解源码中的一些实现细节. CChartAxis类的头文件. #if !defined(AFX_CHA ...
- ChartCtrl源码剖析之——CChartScrollBar类
CChartScrollBar类用来针对每个轴的数据进行滚动,将那些不在当前区域内的数据通过滚动展示出来. CChartScrollBar类的头文件. #pragma once class CChar ...
- ChartCtrl源码剖析之——CChartTitle类
CChartTitle类顾名思义,该类用来绘制波形控件的标题,它处于该控件的区域,如下图所示: CChartTitle类的头文件. #if !defined(AFX_CHARTTITLE_H__499 ...
- ChartCtrl源码剖析之——CChartLegend类
CChartLegend类用来绘制每一个波形的描述信息,它处于该控件的区域,如下图所示: CChartLegend类的头文件. #if !defined(AFX_CHARTLEGEND_H__CD72 ...
- ChartCtrl源码剖析之——CChartGrid类
CChartGrid类用来绘制波形区域中的表格,当绘制波形时波形就显示在这些表格上面.它处于该控件的区域,如下图所示: CChartGrid类的头文件. #if !defined(AFX_CHARTG ...
- PART(Persistent Adaptive Radix Tree)的Java实现源码剖析
论文地址 Adaptive Radix Tree: https://db.in.tum.de/~leis/papers/ART.pdf Persistent Adaptive Radix Tree: ...
- 老李推荐:第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类
老李推荐:第6章3节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令翻译类 每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行 ...
- WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore
影像存储类ImageStore 影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类.当划分完层次 ...
随机推荐
- vs2010 静态使用 opencv 2.46 库
下载opencv2.46的库,假设解压到OpenCV246,设置如下: 在工程的c++的include目录下添加:OpenCV246\opencv\build\include 在工程的c++的lib目 ...
- iOS 用cornerstone 创建分支
第一步:在cornerstone中添加服务器上的代码路径,如下: 第二步:选中服务器路径下的代码,选择“分支”按钮 第三步:开始创建分支 第四步:效果图如下 第五步:选择分支下的路径下载代码并进行修改 ...
- [Bzoj4517]排列技术(错排 + 预处理)
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1508 Solved: 915[Submit][Statu ...
- css三大布局
标准流: 从左到右,从上到下块级元素独占一行,行内元素碰到父盒子边缘换行 浮动: 特点 1 元素浮动之后不占据原来的位置(脱标),变成立体,下面可以有东西,只影响下面的 2 浮动的盒子在一行上显示 3 ...
- javascript是什么?
JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由全部的现 ...
- Python中暂未解决的问题
编写一个复杂的计算器,可以在通过GUI输出出来.参考代码http://www.cnblogs.com/BeginMan/p/3216093.html shelve模块中open()函数调用文件文件的路 ...
- 微软Build2016:Xamarin杂记
去年的Build2015技术大会.留给人印象最深的莫过是Windows 10在手机端.PC端.Xbox等硬件平台上的大一统.还有非常具有科幻气质的HoloLens技术的各种展示.去年尽管也展示了Xam ...
- 【iOS系列】-触摸事件与手势识别
[iOS系列]-触摸事件与手势识别 第一:触摸事件 一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象 UIEvent:称为事件对象,记录事件产生的时刻和类型 两根手指同时触摸一个view ...
- 屏蔽微软的SignalR
去年采用ASP.NET MVC开发项目,在谷歌浏览器里调试页面的时候,发现项目在不停地请求数据,链接很奇怪: http://localhost:63004/654c2dd725bb4401b8fc0c ...
- SpringMVC_配置和注解--跟海涛学SpringMVC(和自己在项目中的实际使用的对比)
Spring2.5 之前,我们都是通过实现Controller 接口或其实现来定义我们的处理器类,就像前面介绍的 这里介绍的是Spring3.1的新特性,虽然现在我用的是spring4.2.6,不过基 ...