Click here to Skip to main content
15,881,204 members
Articles / Desktop Programming / MFC

Digital Display CStatic control

Rate me:
Please Sign up or sign in to vote.
4.98/5 (60 votes)
9 Nov 2002CPOL6 min read 238.1K   10.9K   177  
An article on the Digital Display Control
// Copyright (C) 2002 by Nic Wilson  http://www.nicsoft.com.au
// Written by Nic Wilson nicw@bigpond.net.au
// 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 � 2002 Nic Wilson MUST be included in   
// the startup banner, "About" dialog & printed documentation.   
//
// 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.
//
// Release Date and Version:
// Version: 1.0 November 2002
//
// SEE FEATURES:
//
// Single or multilined displays.
// Three fixed sizes for performance.
// Display can be any colors of your choice.
// CStatic objects can be auto sized.
// Horizontal left or right scrolling for single lined display .
// Vertical up or down scrolling for mulilined displays.
// Display characters can be customised.

// USAGE:

// Add the matrixstatic.cpp and matrixstatic.h files to your project using 
// "Insert Files into Project" function of Visual C++ or Studio.
// This can be accessed from the workspace by right clicking on the "Source 
// Files" and "Header Files" folders.
//
//
// Add the three bitmaps supplied as resources.  THEY MUST BE GIVEN THE ID's of
// IDB_MATRIXLARGE,  IDB_MATRIXSMALL,  IDBMATRIXTINY.  These are obviously for the
// Large, medium and smaller bitmaps respectively.
//
//
// Add an  #include "MatrixStatic.h" to your dialogs .h file.
// Add a CStatic control to your dialog.
// Add a variable of "Category:  Control",  "Variable Type: CMatrixStatic".
// If CMatrixStatic is does not appear then you did not follow the above 
// correctly.  Find your projects  .CLW file and delete it.  Choose ClassWizard
// view and when prompted rebuild the CLW file and include the MatrixStatic files.
//
// If you are feeling adventurous, these are some of the things I would like to see.
// Feel free to post me the code and I will add the best to the class and give you
// credit for it here.

// Optional pixel scrolling rather than character scrolling, maybe with ScrollWindowEx()
// Some extra character graphic bitmaps
// An intelligent resing routine for the characters.
// Any improvements you can think of.

// See the project example for a working demonstration.

#if !defined(AFX_MATRIXSTATIC_H__EA81982F_BB69_4A1A_870D_E62D412FB448__INCLUDED_)
#define AFX_MATRIXSTATIC_H__EA81982F_BB69_4A1A_870D_E62D412FB448__INCLUDED_

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

/////////////////////////////////////////////////////////////////////////////
// CMatrixStatic window
class CMatrixStatic : public CStatic
{
// Construction
public:

	CMatrixStatic();
enum {SMALL = 0, LARGE, TINY};
enum {LEFT = 0, RIGHT, UP, DOWN};


// Attributes
public:

// Operations
public:
	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CMatrixStatic)
	//}}AFX_VIRTUAL

// Implementation
public:
	void SetAutoPadding(bool pad, char ch = ' ');
	int  GetText(LPTSTR string,  int size);
	void SetDisplayColors(COLORREF bk,  COLORREF on,  COLORREF off);
	void SetBkColor(COLORREF bk);
	void SetColor(COLORREF off,  COLORREF on);
	void SetBitmapResource(UINT bitmap);
	void SetSize(int size = SMALL);
	void SetText(LPCTSTR lpszText);
	void StopScroll();
	void DoScroll(int speed, BOOL dir);
	void SetCustomCharSizes(int width, int height, int xspace,  int yspace);
	void AdjustClientYToSize(int size);
	void AdjustClientXToSize(int size);
	void SetNumberOfLines(int max = 0);
	void SetXCharsPerLine(int max = 0);

	virtual ~CMatrixStatic();

	// Generated message map functions
protected:
	//{{AFX_MSG(CMatrixStatic)
	// NOTE - the ClassWizard will add and remove member functions here.
	afx_msg void OnPaint();
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnTimer(UINT nIDEvent);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
private:

	bool GetCharBmpOffset(RECT *rc, char ch);

	char		m_cPadChar;
	CString		m_csStrText;
	bool		m_bModified, m_bImmediateUpdate, m_btimer, m_bAutoPad;	
	COLORREF	m_crOffColor,	m_crOnColor, m_crBackColor;
	UINT		m_iImagematrix, m_iTimer;
	int			m_icharwidth, m_icharheight, m_ixspacing, m_iyspacing;
	int			m_iMaxYChars, m_iMaxXChars, m_iDirection;
	
};

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

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

#endif // !defined(AFX_MATRIXSTATIC_H__EA81982F_BB69_4A1A_870D_E62D412FB448__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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Australia Australia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions