2024-06-23 17:36:53 +08:00

178 lines
5.8 KiB
C++

#if !defined(AFX_DIGISTATIC_H__F77484C2_745F_11D3_A718_87712333104C__INCLUDED_)
#define AFX_DIGISTATIC_H__F77484C2_745F_11D3_A718_87712333104C__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// Digistatic.h : header file
//
// Copyright (C) 2000 by Michel Wassink
// All rights reserved
//
// This is free software.
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name and all copyright
// notices remains intact. If the source code in this file is used in
// any commercial application then a statement along the lines of
// "Portions Copyright © 2000 Michel Wassink" must be included in
// the startup banner, "About" box or printed documentation. An email
// letting me know that you are using it would be nice as well. That's
// not much to ask considering the amount of work that went into this.
//
// No warrantee of any kind, expressed or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
// Version: 1.0
// Release: 1 (februari 2000 to www.codeguru.com and www.codeproject.com)
// Release: 2 (not released yet)
// -----------------------------------------------------------------------
// Notes to changes for release 1 (V1.0):
// - First release.
// Notes to changes for version 1.1:
// - Use Windowtext as defaut text.
// - changed SetBackColor to SetBkColor
// - changed from stl to Afx templates
// Notes to changes for version 1.2
// - added option to draw immediately
// - released at codeprject and codeguru
// Notes to changes for release 2: (V2.0)
// - second release with enhanced speed
// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
// I'll try to keep a version up to date. I can be reached as follows:
// micways@hotmail.com (private site)
// An email letting me know that you are using it would be nice.
/////////////////////////////////////////////////////////////////////////////
#include <afxtempl.h>
#include "RGBCOLOR.H"
// CRect class with double precision for accurate drawing.
class CDoubleRect
{
public:
void SetRect(double x1, double y1, double x2, double y2)
{ left = x1; top = y1; right = x2; bottom = y2;}
double Width() const{return right - left;}
double Height() const{return bottom - top;}
void SetRectEmpty(){left = top = right = bottom = 0.0;}
public:
double left, top, right, bottom;
};
class CDSegment
{
public:
CDSegment();
CDSegment(const CDSegment& Segment);
~CDSegment();
void DefPoints(const POINT* lpPoints, const BYTE* lpTypes, int nCount);
void Draw(CDC *pDC, CDoubleRect DrawPlace, int iWidth) const;
void FreeSegment();
CDSegment operator=(const CDSegment &Segment);
// Implementation
public:
CPoint * m_paPoints; // array with point
BYTE * m_paTypes; // array with connecting info for point
int m_nCount; // number of points
};
typedef CArray< CDSegment, CDSegment> DSegmentArray;
class CDigiChar
{
// Construction
public:
CDigiChar();
CDigiChar(const CDigiChar& DigiChar);
//Attributes:
public:
virtual void SetElementData(WORD wSegmData, int iDispStyle);
void Draw(CDC *pDC, CDoubleRect DrawPlace, CPen *pOffPen, CPen *pOnPen,
CBrush *pOffBrush, CBrush *pOnBrush);
void SetColor(COLORREF OffColor, COLORREF OnColor);
int GetNormWidth() const;
CDigiChar operator=(const CDigiChar &DigiChar);
COLORREF GetColor(void) const { return m_OnColor; }
protected:
int m_Width; // Width of character
WORD m_wSegmData; // segments to highlight (binairy encoded)
DSegmentArray m_SegmentArray; // Character is array of segments
int m_NSegments; // Number of segments
COLORREF m_OffColor; // Color of segment when off
COLORREF m_OnColor; // Color of segment when on
};
typedef CArray<CDigiChar, CDigiChar> DigiCharArray;
/////////////////////////////////////////////////////////////////////////////
// CDigiStatic class
class CDigiStatic : public CStatic
{
// Construction
public:
CDigiStatic();
// Attributes
public:
enum {
DS_SMOOTH = 1, // Pioneer kind of characters
DS_STYLE14 = 2, // use allways 14 segment display.
DS_SZ_PROP = 4 // size proportional
};
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDigiStatic)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CDigiStatic();
void SetText(LPCTSTR lpszText);
void Format(LPCTSTR lpszFormat, ...);
void SetColor(COLORREF OffColor, COLORREF OnColor);
COLORREF GetOnColor() const {return m_OnColor;};
COLORREF GetOffColor() const {return m_OffColor;};
void SetDrawImmediately(BOOL Enable = TRUE);
COLORREF SetBkColor(COLORREF BackColor = BLACK);
BOOL ModifyDigiStyle(DWORD dwRemove, DWORD dwAdd);
// Generated message map functions
protected:
CDigiChar * DefineChar(TCHAR cChar);
void BuildString();
CString m_strText; // Current text
BOOL m_Modified; // text is dirty
DigiCharArray m_CharArray; // digistatic is an array of characters
COLORREF m_OffColor; // Color of segment when off
COLORREF m_OnColor; // Color of segment when on
COLORREF m_BackColor; // Background color
DWORD m_DispStyle; // DS_... may be bitwise OR-red
BOOL m_bImmediateUpdate; // Enable/Disable immediate repaint
//{{AFX_MSG(CDigiStatic)
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_DIGISTATIC_H__F77484C2_745F_11D3_A718_87712333104C__INCLUDED_)