📄 drawsample.h
字号:
// DrawSample.h
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DRAWSAMPLE_H__D8ACBFC1_A3AC_11D5_97CB_0050BA4159F5__INCLUDED_)
#define AFX_DRAWSAMPLE_H__D8ACBFC1_A3AC_11D5_97CB_0050BA4159F5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define SHOW_TYPE MEM_ANALOG|DDE_ANALOG|MEM_LONG|DDE_LONG
#define CHECK_TYPE EV_ANALOG|EV_LONG
#define DEFAULT_VARNAME _T( "" )
// 绘制时常数
#define PI 3.14159
#define VERY_LITTLE 1e-6
#define FONT_INDEX 3 // 宋体
#define SCALE_FONT_HEIGHT int( -4 * fact ) // 表盘标签字体高度
#define LABEL_FONT_HEIGHT int( -5 * fact ) // 刻度标签字体高度
// 校验时常数
#define FACE_LABEL_LEN 255 // 表盘标签长度
#define LINK_VARNAME_LEN 255 // 动画连接的变量名长度
#define KEY_NAME_LEN 32 // 快捷键名称长度
#define SECTION_NAME_LEN 32 // 安全区名称长度
#define PRIME_SCALE_MIN_COUNT 2 // 最小主刻度数
#define PRIME_SCALE_MAX_COUNT 20 // 最大主刻度数
#define METER3_PRIME_SCALE_MAX_COUNT 40 // 仪表3最大主刻度数
#define SLAVE_SCALE_MIN_COUNT 0 // 最小副刻度数
#define SLAVE_SCALE_MAX_COUNT 10 // 最大副刻度数
#define MIN_SCALE_LABEL_MAIN_DIFF 1 // 最小刻度标签主偏差
#define SCALE_LABEL_DECIMAL_MIN_LEN 0 // 刻度标签最小小数长度
#define SCALE_LABEL_DECIMAL_MAX_LEN 5 // 刻度标签最大小数长度
//仪表配置结构
typedef struct
{
TCHAR szFaceLabel[ FACE_LABEL_LEN ]; // 表盘标签文本
TCHAR szValName[ LINK_VARNAME_LEN ]; // 与指针建立动画连接的变量
DWORD dwFaceFillColor; // 表盘填充颜色
DWORD dwFaceTextColor; // 表盘标签文本颜色
int nLabelDecimalLen; // 表盘刻度小数位数
DWORD dwLabelTextColor; // 表盘刻度文本颜色
int nLabelMainDiff; // 表盘标签主偏差
float fltMaxScale; // 指针最大刻度
float fltMinScale; // 指针最小刻度
int nPrimeScale; // 表盘主刻度数
int nSlaveScale; // 表盘副刻度数
}METER1;
// 仪表刻度结构
struct METERSCALE
{
int nPrimeScale ; // 主刻度数目
int nPrimeScaleLen ; // 主刻度长度
int nPrimeScaleWidth ; // 主刻度宽度
COLORREF clrPrimeScale ; // 主刻度颜色
int nSlaveScale ; // 副刻度数目
int nSlaveScaleLen ; // 副刻度长度
int nSlaveScaleWidth ; // 副刻度宽度
COLORREF clrSlaveScale ; // 副刻度颜色
};
// 仪表刻度标签结构
struct METERSCALELABEL
{
float fltMinScale ; // 标签最小刻度
float fltMaxScale ; // 标签最大刻度
int nLabelOffset ; // 标签距主刻度长度
int nPenFontIndex ; // 标签字体索引
int nPenFontHeight; // 标签字体高度
int nPenFontWidth ; // 标签字体宽度
int nPenFontStyle ; // 标签字体类型
int nLabelDecimalLen ; // 标签小数位数
COLORREF clrLabelColor ; // 标签颜色
int nMainDiff ; // 主偏差,数据为1时显示所有的文本标签,
// 为2时隔两格显示一个文本标签,依此类推
};
BOOL DrawSample( void * pConfig , float fact ,float x_fact , float y_fact , int nAction );
/*
** 功 能:绘制表盘标签,限制在边界之内
** 参 数:
** graphic 标签结构
*/
void DrawMeterLabel( DRAWLABEL & graphic );
/*
** 功 能:画表盘刻度
** 返 回 值:无
** 输入参数:
** rcMeterScale : 圆外切矩形 \ | /
** nStartAngle : 刻度线的起始角 ->\|/<-
** nEndAngle : 刻度线的结束角 nStartAngle ( | ) nEndAngle
** pScale : 刻度线结构指针,不能为 NULL |
** pLabel : 标签结构指针,为 NULL 不画标签
** bMarkInside : 刻度在内( TRUE ),刻度在外( FALSE )
*/
void DrawMeterScale( CRect & rcMeterScale,
int nStartAngle, int nEndAngle,
METERSCALE * pScale,
METERSCALELABEL * pLabel,
BOOL bMarkInside );
/*
功 能:获得表盘刻度标签外切矩形
返 回 值:刻度标签外切矩形
输入参数:
rcMeterScale : 圆外切矩形 \ | /
nStartAngle : 刻度线的起始角 ->\|/<-
nEndAngle : 刻度线的结束角 nStartAngle ( | ) nEndAngle
pScale : 刻度线结构指针,不能为 NULL |
pLabel : 标签结构指针,为 NULL 不画标签
bMarkInside : 刻度在内( TRUE ),刻度在外( FALSE )
*/
CRect GetMeterScaleLabelRect( CRect & rcMeterScale,
int nStartAngle, int nEndAngle,
METERSCALE * pScale,
METERSCALELABEL * pLabel,
BOOL bMarkInside );
/*
** 功 能:取得刻度标签文本
** 返 回 值:刻度标签文本
** 参 数:
** dblCurrScale 刻度数值
** nDecimalLen 小数位数
** 说 明:最长7s位,超过7位用科学计数法
*/
CString GetScaleLabelText( double dblCurrScale, int nDecimalLen );
/*
** 功 能:剪裁字符串以适应标签结构中的矩形
** 参 数:
** graphic 标签结构
** nOffset 标签与边界的偏差
** 返 回 值:剪裁后的字符串
**
*/
CString MakeShortString( DRAWLABEL & graphic, int nOffset) ;
#endif // !defined(AFX_DRAWSAMPLE_H__D8ACBFC1_A3AC_11D5_97CB_0050BA4159F5__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -