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

📄 pointerdevice.h

📁 上位机图形显示程序,可用于8051单片机的开发,通信及控制
💻 H
字号:
/////////////////////////////////////////////////////////
//			指针式测量设备PointerDevice封装类
//	版本:1.07
//	最后修改日期:2002.1.25
/////////////////////////////////////////////////////////

#if !defined(AFX_POINTERDEVICE_H__D08CF18E_8665_45AC_B181_603A39FC70D0__INCLUDED_)
#define AFX_POINTERDEVICE_H__D08CF18E_8665_45AC_B181_603A39FC70D0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// PointerDevice.h : header file
//

#define PI	3.14159265	//圆周率
#define ANG	PI/180 		//1度的角度相对的弧度值

//以下几个宏定义了仪表所处的几种工作状态
#define PD_TEST		0	//测试状态,创建时默认的状态,指针会自动移动以测试是否正常工作
#define PD_UPDATED	1	//工作状态之一,表示当前仪表的指针已经指到合适的位置
#define PD_UPDATING	2	//工作状态之二,表示当前仪表的指针正在移动过程中,尚未达到目的位置
#define PD_SHUTDOWN	3	//关闭状态,此状态下仪表不作任何动作。

//一下几个宏定义了仪表的几种外观样式
#define PD_NONE		0	//没有特殊的样式
#define PD_3DSTYLE	1	//圆形表周围有3D边框
#define PD_3DBORDER	2	//仪表周围有3D矩形框

/////////////////////////////////////////////////////////////////////////////
// PointerDevice window

class PointerDevice : public CStatic
{
// Construction
public:
	PointerDevice(CWnd *parent);

// Attributes
public:

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(PointerDevice)
	//}}AFX_VIRTUAL

// Implementation
public:
	void PD_SetBorderColor(COLORREF color);
	void PD_SetTitle( int x, int y, CString title, UINT fontsize, COLORREF color);
	UINT PD_PtInHotArea(CPoint point);
	void PD_SetBitmapBk(UINT bitmap_id = 0, UINT showmode = 0);
	void PD_SetPointerShadow(UINT show = 0, COLORREF color = RGB(100, 100, 100), int offset_x = 3, int offset_y = 2);//该函数设置指针的阴影样式
	void PD_SetStepLength(double length);	//该函数设置指针最小的摆动角度
	void PD_SetStatus(UINT status);			//该函数设置仪表的状态
	void PD_SetIsLoop(UINT op);				//该函数设置指针是否可以循环转动
	void PD_Update(void);					//该函数用已知变量完成对其他变量的赋值,应该在其他变量初始化完成后最后调用
	void PD_SetOrigin(long x, long y);		//该函数设置仪表内部的原点位置
	void PD_SetTimer(UINT timeout);			//该函数设置仪表的内部定时器
	void PD_MoveWindow(int x, int y);		//该函数移动仪表的位置,并完成重画
	void PD_SetSize(UINT width, UINT height);	//该函数设置仪表的大小

	void PD_SetOutputSize(UINT width, UINT height);	//该函数设置输出框的大小
	void PD_SetOutputBdColor(COLORREF color);		//该函数设置输出框边框颜色
	void PD_SetOutputTextColor(COLORREF color);		//该函数设置输出文字的颜色
	void PD_SetOutputBkColor(COLORREF color);		//该函数设置输出框的背景颜色
	void PD_SetOutputFontSize(UINT size);			//该函数设置输出框的文字大小
	void PD_SetOutputPos(int rect_x, int rect_y, int text_x, int text_y);	//该函数设置输出框的中心位置(相对于PD_Origin)和文字的中心位置(相对于PD_Origin)

	void PD_SetAxleStyle(UINT radius, COLORREF color);//该函数设置中心轴的样式,分别制定其半径和颜色

	void PD_SetPointerStyle(int side_x, int side_y, int tail);	//该函数设置仪表指针的样式, side_x和side_y是三角形一个端点(另外两个端点分别为原点和目标点)相对于原点的位置,最后一个tail是指针反向延长的长度
	void PD_SetPointerWidth(UINT width);	//该函数设置仪表指针的绘制宽度
	void PD_SetPointerLength(UINT length);	//该函数设置指针的长度
	void PD_SetPointerColor(COLORREF color);	//该函数设置指针的亮面的颜色,用红、黄、篮三种颜色的份量决定,三种颜色份量范围0~255

	void PD_SetCurrentNumber(double number);	//该函数设置仪表的当前要显示的数值
	void PD_SetNumberRange(double min, double max);	//该函数设置仪表的测量数值范围
	void PD_SetDeltaNumber(double deltanumber);	//该函数设置刻度线标注时每格数值的增量
	void PD_SetCenterNumber(double number);	//该函数设置指针默认位置所对应的数值
	
	void PD_SetTextStartAngle(double angle);//该函数设置刻度线附近文字的开始标注位置
	void PD_SetTextColor(COLORREF color);	//该函数设置刻度线附近文字颜色
	void PD_SetTextSpace(UINT length);		//该函数设置刻度线附近文字和刻度线之间的距离
	void PD_SetFontSize(UINT size);			//该函数设置刻度线附近文字的字体大小
	void PD_SetSweepAngle(double angle);	//该函数设置仪表刻度弧线的张角
	void PD_SetCenterAngle(double angle);	//该函数设置刻度弧线中心的角度,将决定表盘的摆放方向
	void PD_SetBigGridNum(UINT num);		//该函数设置大刻度的格数目
	void PD_SetBigGridLength(UINT length);	//该函数设置大刻度线的长度
	void PD_SetSmallGridNum(UINT num);		//该函数设置小刻度的格数目
	void PD_SetSmallGridLength(UINT length);//该函数设置小刻度线的长度
	void PD_SetRadius(UINT radius);			//该函数设置刻度弧线的半径
	void PD_SetCalibrationColor(COLORREF color);	//该函数设置刻度线颜色
	
	void PD_SetInnerRadius(UINT radius);	//该函数设置面板内部空心圆的半径
	void PD_SetFaceColor(COLORREF color);	//该函数设置面板颜色
	void PD_SetFaceSweepAngle(double angle);//该函数设置仪表面板的张角
	void PD_SetBorderWidth(UINT width);		//该函数设置仪表圆形边界的宽度
	void PD_SetFaceRadius(UINT radius);		//该函数设置面板的半径
	void PD_SetBkColor(COLORREF color);		//该函数设置仪表的背景颜色
	
	virtual ~PointerDevice();

	// Generated message map functions
protected:
	//{{AFX_MSG(PointerDevice)
	afx_msg void OnPaint();
	afx_msg void OnTimer(UINT nIDEvent);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
private:
	COLORREF PD_TitleColor;
	CPoint PD_TitleOffset;
	UINT PD_TitleFontSize;
	CFont PD_TitleFont;
	CString PD_Title;
	UINT PD_BitmapID;	//位图背景的资源ID
	UINT PD_UseBitmap;	//标志是否使用位图背景,0表示不使用,1表示使用,2表示将位图映射使用

	UINT PD_Status;			//仪表当前的状态
	UINT PD_Timer;			//仪表内部定时器的触发时间间隔
	UINT PD_Width;			//仪表的高度
	UINT PD_Height;			//仪表的宽度
	double PD_StepLength;	//仪表指针的最小摆动角度	
	CPoint PD_Origin;		//仪表的指针转轴(原点),采用仪表的内部坐标系

	UINT PD_Accuracy;				//仪表刻度文字的输出精度,表示读数后面保留小数位数
	UINT PD_OutputAccuracy;			//仪表的输出示数精度,表示读数后面保留小数位数
	UINT PD_OutputHeight;			//仪表的输出框高度
	UINT PD_OutputWidth;			//仪表的输出框宽度
	UINT PD_OutputFontSize;			//仪表的输出示数字体大小
	CPoint PD_OutputTextPos;		//仪表输出示数的位置,相对于内部原点坐标
	CPoint PD_OutputPos;			//仪表的输出框的中心相对于内部原点的位置
	CFont PD_OutputFont;			//仪表的输出示数字体变量
	COLORREF PD_OutputBdColor;		//仪表的输出框的边界颜色
	COLORREF PD_OutputBkColor;		//仪表的输出示数背景的颜色
	COLORREF PD_OutputTextColor;	//仪表的输出示数文字的颜色

	double PD_FaceSweepAngle;	//仪表面板的张角
	double PD_FaceLeftAngle;	//仪表面板左侧弧度
	double PD_FaceRightAngle;	//仪表面板的右侧弧度
	UINT PD_InnerRadius;		//仪表面板上的内部中空圆半径
	UINT PD_FaceRadius;			//仪表面板的半径
	CPoint PD_FaceEndPoint;		//仪表面板弧线的终点位置
	CPoint PD_FaceStartPoint;	//仪表面板弧线的起点位置
	COLORREF PD_FaceColor;		//仪表圆形面板的颜色
	COLORREF PD_BkColor;		//仪表的背景颜色

	UINT PD_AxleRadius;		//圆形轴的半径
	COLORREF PD_AxleColor;	//圆形轴的颜色(选其中的最深色)

	int PD_PointerTail;			//指针尾部的点距离原点的位置
	int PD_CurrentDirection;	//仪表指针的当前移动方向
	int PD_Direction;			//指针摆动的正方向,有1和-1两种
	double PD_PointerSideRadius;//指针边上的点对应于原点的半径
	double PD_PointerSideAngle;	//指针边上的点对应于X轴的角度
	double PD_ObjectAngle;		//指针转动的目的角度(相对于PD_CenterAngle),采用角度值
	double PD_CurrentAngle;		//仪表指针当前的摆动角度(相对于PD_CenterAngle),采用角度值
	UINT PD_PointerWidth;		//仪表指针的绘制线条宽度
	UINT PD_RotateDir;			//仪表指针的旋转方向,为true表示顺时针,为false表示逆时针
	UINT PD_PointerLength;		//仪表指针长度
	UINT PD_IsLoop;				//仪表指针是否可以循环转动,为true表示可以循环转动,false则不允许循环转动
	UINT PD_HasPointerShadow;	//标志是否有指针阴影
	COLORREF PD_PointerColor;	//指针亮面的颜色
	COLORREF PD_PointerShadowColor;	//指针阴影颜色
	CPoint PD_PointerSide;			//指针边部的点
	CPoint PD_PointerShadowOffset;	//指针阴影相对于指针的偏移量

	UINT PD_BorderWidth;		//仪表的圆形边框大小
	UINT PD_Style;				//仪表的样式参数
	COLORREF PD_BorderColor;	//仪表的圆形边框颜色(选其中的最深色)
	
	double PD_CurrentNumber;	//当前要显示的数值
	double PD_MinNumber;		//量程内最小数值
	double PD_MaxNumber;		//量程内最大数值
	double PD_DeltaNumber;		//刻度示数增量
	double PD_CenterNumber;		//刻度的中心示数

	double PD_SweepAngle;			//仪表刻度弧的跨度,采用角度值
	double PD_CenterAngle;			//仪表刻度弧的中心位置相对于X轴方向的夹角,采用角度值
	double PD_RightAngle;			//仪表刻度弧的右侧与X轴方向的夹角,采用角度值
	double PD_LeftAngle;			//仪表刻度弧的左侧与X轴方向的夹角,采用角度值
	double PD_TextStartAngle;		//刻度文字的起始位置相对于PD_CenterAngle的夹角,采用角度值
	UINT PD_TextSpace;				//仪表的刻度附近文字和刻度线之间的空间大小
	UINT PD_FontSize;				//仪表刻度附近文字的大小
	UINT PD_SmallGridLength;		//仪表刻度弧上小刻度(无示数)的刻度线长度
	UINT PD_SmallGridNum;			//仪表刻度弧上小刻度(无示数)的格子数目
	UINT PD_BigGridLength;			//仪表刻度弧上大刻度(标示数)的刻度线长度
	UINT PD_BigGridNum;				//仪表刻度弧上大刻度(标示数)的格子数目
	UINT PD_Radius;					//仪表刻度弧的外半径,单位是象素
	CPoint PD_EndPoint;				//仪表刻度弧上的左侧端点坐标(采用仪表的内部坐标系)
	CPoint PD_CenterPoint;			//仪表刻度弧上的中点坐标(采用仪表的内部坐标系)
	CPoint PD_StartPoint;			//仪表刻度弧上的右侧端点坐标(采用仪表的内部坐标系)	
	CFont PD_Font;					//仪表的刻度附近文字字体变量
	COLORREF PD_TextColor;			//刻度线附近文字的颜色
	COLORREF PD_CalibrationColor;	//刻度线的颜色

	void DrawFace(void);			//该函数重画仪表自身的界面
	double GetCurrentNumber(void);	//该函数可以获取当前指针所表示的数字
	COLORREF GetNextColor(COLORREF current_color, int delta);
	COLORREF GetNextColor(COLORREF color, double ratio);
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_POINTERDEVICE_H__D08CF18E_8665_45AC_B181_603A39FC70D0__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -