#if !defined(AFX_CHARTOBJECT_H__6ED024F2_00D9_45D5_AB83_258EF0075288__INCLUDED_)
#define AFX_CHARTOBJECT_H__6ED024F2_00D9_45D5_AB83_258EF0075288__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000 #include <afx.h>
#include <afxwin.h> // CChartCtrl类的前置声明
class CChartCtrl;
class CChartObject
{
friend CChartCtrl;
public:
CChartObject(CChartCtrl* pOwner);
virtual ~CChartObject();
void SetVisible(bool bVisible);
bool IsVisible() const { return m_bIsVisible; }
COLORREF GetColor() const { return m_ObjectColor; }
void SetColor(COLORREF NewColor);
COLORREF GetShadowColor() const { return m_ShadowColor; }
void SetShadowColor(COLORREF NewColor);
void EnableShadow(bool bEnable);
void SetShadowDepth(int Depth);
bool Clip(int& dX, int& dY) const
{
bool bResult = true;
if (dX>m_ObjectRect.right)
{
dX = m_ObjectRect.right;
bResult = false;
}
if (dX<m_ObjectRect.left)
{
dX = m_ObjectRect.left;
bResult = false;
}
if (dY>m_ObjectRect.bottom)
{
dY = m_ObjectRect.bottom;
bResult = false;
}
if (dY<m_ObjectRect.top)
{
dY = m_ObjectRect.top;
bResult = false;
}
return bResult;
}
protected:
void SetRect(CRect NewTect) { m_ObjectRect = NewTect; } CRect m_ObjectRect; // Size of the object
COLORREF m_ObjectColor; // Color of the objet
CChartCtrl* m_pParent; // Owner of the object
bool m_bIsVisible;
bool m_bShadow; // Specifies if the object generate a shadow.
// This is not supported for all objects.
COLORREF m_ShadowColor;
int m_iShadowDepth;
private:
virtual void Draw(CDC* pDC) = ;
};
#endif // !defined(AFX_CHARTOBJECT_H__6ED024F2_00D9_45D5_AB83_258EF0075288__INCLUDED_)
CChartObject类的源文件。
#include "stdafx.h"
#include "ChartCtrl.h"
CChartObject::CChartObject(CChartCtrl* pOwner)
{
m_ObjectRect.left = m_ObjectRect.right = ;
m_ObjectRect.top = m_ObjectRect.bottom = ;
m_ObjectColor = RGB(,,);
m_pParent = pOwner;
m_bIsVisible = true;
m_bShadow = false;
m_ShadowColor = RGB(,,);
m_iShadowDepth = ;
}
CChartObject::~CChartObject()
{
}
void CChartObject::SetVisible(bool bVisible)
{
m_bIsVisible = bVisible;
m_pParent->RefreshCtrl();
}
void CChartObject::SetColor(COLORREF NewColor)
{
m_ObjectColor = NewColor;
m_pParent->RefreshCtrl();
}
void CChartObject::SetShadowColor(COLORREF NewColor)
{
m_ShadowColor = NewColor;
m_pParent->RefreshCtrl();
}
void CChartObject::EnableShadow(bool bEnable)
{
m_bShadow = bEnable;
m_pParent->RefreshCtrl();
}
void CChartObject::SetShadowDepth(int Depth)
{
m_iShadowDepth = Depth;
m_pParent->RefreshCtrl();
}
- 头文件中的#if !defined(……) …… #endif是为了避免当前头文件被二次包含,起到类似功能的还有#ifndef …… #endif。
- _MSC_VER为Microsoft的C编译器版本,微软不同时期,编译器有不同的版本:
- Visual C++ 2005 MS VC++8.0 _MSC_VER = 1400
- Visual C++ 2008 MS VC++9.0 _MSC_VER = 1500
- Visual C++ 2010 MS VC++10.0 _MSC_VER = 1600
- 在程序中加入_MSC_VER宏可以根据编译器版本让不同版本的编译器选择性地编译一段程序。查看编译的版本信息,可以在开发工具对应的Command line里敲 cl /?
- Clip函数用来将函数参数中的位置约束在m_ObjectRect矩形空间内,当该位置在m_ObjectRect矩形空间的时候函数返回值为True;否则,返回False。
ChartCtrl源码剖析之——CChartObject类的更多相关文章
-
ChartCtrl源码剖析之——CChartAxis类
CChartAxis类用来绘制波形控件的坐标轴,这个源码相对较复杂,当初阅读的时候耗费了不少精力来理解源码中的一些实现细节. CChartAxis类的头文件. #if !defined(AFX_CHA ...
-
ChartCtrl源码剖析之——CChartTitle类
CChartTitle类顾名思义,该类用来绘制波形控件的标题,它处于该控件的区域,如下图所示: CChartTitle类的头文件. #if !defined(AFX_CHARTTITLE_H__499 ...
-
ChartCtrl源码剖析之——CChartScrollBar类
CChartScrollBar类用来针对每个轴的数据进行滚动,将那些不在当前区域内的数据通过滚动展示出来. CChartScrollBar类的头文件. #pragma once class CChar ...
-
ChartCtrl源码剖析之——CChartAxisLabel类
CChartAxisLabel类用来绘制轴标签,上.下.左.右都可以根据实际需要设置对应的轴标签.它处于该控件的区域,如下图所示: CChartAxisLabel类的头文件. #if !defined ...
-
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类的基类.当划分完层次 ...
随机推荐
-
Glide请求图片能携带Cookie的哟!
在Web编程中我们都很熟知一个概念,当有了seesion登录状态时,你可以访问一些资源但如果你没有登录的话很多资源是无法访问的. 在android的WebApi中当然一样拥有这个概念.比如,用户的头像 ...
-
谈谈springMVC和Strut2的理解
关于struts2框架原理 执行流程 struts2框架的核心是一个过滤器,我们编写的action类都继承ActionSupport的接口(顶层是一个过滤器filter),用户发送请求,经过核心过滤器 ...
-
Mysql-学习笔记(==》存储过程 九)
1.存储过程概念在大型数据库系统中,一组为了完成特定功能的sql语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 2.建立存储过程delimit ...
-
HttpModule和Http Handler (比较与区别)
HttpModule和Http Handler (比较与区别) HttpModule概述 暂时先不考虑我们自己实现Http Module的情况.在.Net中,Http Module 是实现了IHttp ...
-
insmod module_param 模块参数
模块参数 引导模块时,可以向它传递参数.要使用模块参数加载模块,这样写: insmod module.ko [param1=value param2=value ...] 为了使用这些参数的值,要在模 ...
-
[Oracle] Oracle和SQLServer的数据类型比较
类型名称 Oracle SQLServer 比较 字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb 变长字符数据类型 VA ...
-
fsdfasfsa
http://www.cnblogs.com/daniel206/archive/2008/01/16/1041729.html using System.IO;using System.Net;us ...
-
ExtJS拖拽效果
ExtJS拖拽效果 <html> <head> <title>hello</title> <meta http-equiv="conte ...
-
Elasticsearch 学习(一):入门
一.概念 Elasticsearch 是一个实时分布式搜索和分析引擎.它用于全文搜索.结构化搜索.分析以及将这三者混合使用. *.英国卫报.*.Github 等公司都在使 ...
-
洛谷P2886 [USACO07NOV]牛继电器Cow Relays
题意很简单,给一张图,把基本的求起点到终点最短路改成求经过k条边的最短路. 求最短路常用的算法是dijkstra,SPFA,还有floyd. 考虑floyd的过程: c[i][j]=min(c[i][ ...