Click here to Skip to main content
15,892,537 members
Articles / Desktop Programming / MFC

An Improved Analog Meter Control

Rate me:
Please Sign up or sign in to vote.
4.76/5 (13 votes)
19 Jun 2000 209K   3.8K   89  
An Analog Meter Control for displaying real-time data
#if !defined(AFX_3DMETERCTRL_H__C84783CA_4358_11D4_9F64_D07E4CC1E805__INCLUDED_)
#define AFX_3DMETERCTRL_H__C84783CA_4358_11D4_9F64_D07E4CC1E805__INCLUDED_

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

#ifndef ROUND
#define ROUND(x) (int)((x) + 0.5 - (double)((x) < 0))
#endif

#define BOUNDARY_POINTS 48

/////////////////////////////////////////////////////////////////////////////
// C3DMeterCtrl window

class C3DMeterCtrl : public CStatic
{
// Construction
public:
	C3DMeterCtrl();

// Attributes
protected:
	int m_nBottomCX ;
	int m_nBottomCY ;
	int m_nBottomRadius ;
	int m_nTopRadius ;
	int m_nValueFontHeight ;
	int m_nValueBaseline ;
	int m_nValueCenter ;

	double m_dLeftAngleRad ;
	double m_dRightAngleRad ;

	CRect m_rectCtrl ;
	CRect m_rectValue ;
	CPoint m_pointBoundary[BOUNDARY_POINTS] ;
	CRgn m_rgnBoundary ;

	CFont m_fontValue ;

	COLORREF m_colorWindow ;
	COLORREF m_colorHighlight ;
	COLORREF m_colorShadow ;
	COLORREF m_colorButton ;
	COLORREF m_colorText ;
	
	CDC m_dcBackground ;

	CBitmap *m_pBitmapOldBackground ;
	CBitmap m_bitmapBackground ;

public:
	int m_nScaleDecimals ;
	int m_nValueDecimals ;

	double m_dCurrentValue ;
	double m_dMaxValue ;
	double m_dMinValue ;

	COLORREF m_colorNeedle ;
	CString m_strUnits ;
	
// Operations
public:
	void DrawMeterBackground(CDC *pDC, CRect &rect) ;
	void DrawNeedle(CDC *pDC) ;
	void DrawValue(CDC *pDC) ;
	void UpdateNeedle(double dValue) ;
	void ReconstructControl() ;
	void SetRange(double dMin, double dMax) ;
	void SetScaleDecimals(int nDecimals) ;
	void SetValueDecimals(int nDecimals) ;
	void SetUnits(CString &strUnits) ;
	void SetNeedleColor (COLORREF colorNeedle) ;
	
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(C3DMeterCtrl)
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~C3DMeterCtrl();

	// Generated message map functions
protected:
	//{{AFX_MSG(C3DMeterCtrl)
	afx_msg void OnPaint();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
};

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

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

#endif // !defined(AFX_3DMETERCTRL_H__C84783CA_4358_11D4_9F64_D07E4CC1E805__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior) Digital Metrology Solutions, Inc.
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions