📄 roundmeter.h
字号:
/***********************************************************************
* Copyright (c) 2007* All rights reserved.*
* ATTRIBUTE: 一个仪表控件类,用来仿真工业控制现场仪表数据显示等
* FILE NAME: RoundMeter.h
* FILE ID: SYSTEMCTRL-ROUNDMETER-H
* ABSTRACT: 可用于工业控制仿真仪表数据显示等
* CURRENT VERSION: V1.0
* AUTHOR: 戚高
* CONTECT: successq_g@163.com
* BUILD DATA: 26/12/2007
* COMPLETION DATE: 26/12/2007
* PRE-VERSION: NONE
* PRE-AUTHOR: NONE
* PRE-COMPLETION DATE:
* NOTE: 未经授权请不要作为商业用途,或者如果您要作为商业
用途,请联系作者
***********************************************************************/
#ifndef __ROUNDMETER_H__
#define __ROUNDMETER_H__
#define MAXNAMELENGTH 99
#define PI 3.1415926
class CRoundMeter : public CStatic
{
public:
void SetTickColor(const COLORREF clTickColor,const COLORREF clSubTickColor);
void SetTextColor(const COLORREF clTextColor, const COLORREF clTextBackColor, const COLORREF clWarnTextColor, const COLORREF clWarnTextBackColor);
void SetFifthColor(const COLORREF clFifthColor,const COLORREF clFifthLineColor);
void SetFourthColor(const COLORREF clFourthColor,const COLORREF clFourthLineColor);
void SetThirdColor(const COLORREF clThirdColor,const COLORREF clThirdLineColor);
void SetSecondColor(const COLORREF clSecondColor,const COLORREF clSecondLineColor);
void SetFirstColor(const COLORREF clFirstColor,const COLORREF clFirstLineColor);
void SetNeedColor(const COLORREF clNeedColor,const COLORREF clNeedLineColor,const COLORREF clWarnNeedColor,const COLORREF clWarnNeedLineColor);
void SetAngle(int StartAngle, int EndAngle);
CRoundMeter();
virtual ~CRoundMeter();
void ReconstructControl();
void SetCurrentValue(const double dCurrentValue);
COLORREF GetMeterBackColor();
void SetMeterBackColor(const COLORREF clBackColor,const COLORREF clBackLineColor);
int GetTicks();
void SetTicks(const int nTicks);
int GetSubTicks();
void SetSubTicks(const int nSubTicks);
void SetRange(const double dMin, const double dMax,const double dWarnMin,const double dWarnMax);
char * GetUnits();
void SetUnits(const char *strUnits);
void SetMouseDrag(const bool bMouseDrag);
bool GetMouseDrag() const;
private:
virtual void PreSubclassWindow();
//绘制仪表背景
void DrawMeterBackground(CDC *pDC, CRect &rect);
void DrawNeedle(CDC *pDC, CRect &rect);
void DrawValue(CDC *pDC, CRect &rect);
double GetValue(double &dAngle);
double GetAngle(CPoint &ptCur);
protected:
//{{AFX_MSG(CRoundMeter)
afx_msg void OnPaint();
// afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
// afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
// afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
//圆直径
void CalAboutTicks(int nRadius);
//返回遮蔽结果,圆中心,半径,起始角,结束角
int CalVeilRgn(POINT* PtRgn,POINT PtCenter,int nRadius,int StartAngle, int EndAngle); //
//绘图设备环境,区域点数组,数组点数,区域颜色
void DrawRgn(CDC *pDC,POINT *Rgn,int ptNum,COLORREF Fillcolor);
CRect m_rectCtrl; // 控件区域
CDC m_dcMeterPlate;
CBitmap m_bitmapMeterPlate;
CBitmap *m_pbitmapOldMeterPlate;
CPoint m_ptMeterCenter; // 仪表中心
int m_nRadiusFrame; // 仪表盘边框
//从开始角度到结束角度顺时针旋转的圈,角度X轴右向为0度,逆时针为正
int m_nStartAngle; // 开始角度,不小于0,不大于360
int m_nEndAngle; // 结束角度,不小于0,不大于360
int m_ncnt; //遮蔽多边形点数
//颜色相关变量
COLORREF m_NeedleColor; //指针颜色
COLORREF m_NeedleLineColor; //指针线色
COLORREF m_WarnNeedleColor; //报警指针颜色
COLORREF m_WarnNeedleLineColor; //报警指针线色
COLORREF m_FirstColor; //第一圈颜色
COLORREF m_FirstLineColor; //第一圈线色
COLORREF m_SecondColor; //第二圈颜色
COLORREF m_SecondLineColor; //第二圈线色
COLORREF m_ThirdColor; //第三圈颜色
COLORREF m_ThirdLineColor; //第三圈线色
COLORREF m_FourthColor; //第四圈颜色 指针圈1
COLORREF m_FourthLineColor; //第四圈线色 指针圈1
COLORREF m_FifthColor; //第五圈颜色 指针圈2
COLORREF m_FifthLineColor; //第五圈线色 指针圈2
COLORREF m_TextColor; //普通字体颜色
COLORREF m_TextBackColor; //普通字体底色
COLORREF m_WarnTextColor; //报警字体颜色
COLORREF m_WarnTextBackColor; //报警字体底色
COLORREF m_BackColor; //最外方框颜色
COLORREF m_BackLineColor; //最外方框线色
COLORREF m_TickColor; //大格刻度颜色
COLORREF m_SubTickColor; //小格刻度颜色
double m_dMaxValue; //表量程初始值
double m_dMinValue; //表量程终值
double m_WarnMaxValue; //报警上限
double m_WarnMinValue; //报警下限
int m_nTicks; //大格个数
int m_nSubTicks; //大格中小格个数
CArray<CPoint,CPoint> m_TicksSPt; //大格起始点
CArray<CPoint,CPoint> m_TicksEPt; //大格终止点
CArray<CRect,CRect> m_TicksTitle; //写刻度的矩形
CArray<CPoint,CPoint> m_SubTicksSPt; //小格起始点
CArray<CPoint,CPoint> m_SubTicksEPt; //小格终止点
CRect m_nrectUnits; //表单位矩形
CRect m_nrectValue; //Value显示的矩形
char m_strUnits[MAXNAMELENGTH + 1]; //表单位
double m_dCurrentValue; //当前值
bool m_bMouseDrag; //是否允许鼠标拖动
BOOL m_bReset; //是否重新计算绘图相关变量
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -