⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawsample.h

📁 组态王图库开发包
💻 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 + -