Click here to Skip to main content
15,891,184 members
Articles / Desktop Programming / MFC

Plot Graphic Library

Rate me:
Please Sign up or sign in to vote.
4.95/5 (70 votes)
7 May 2003LGPL36 min read 1.4M   51.3K   383  
A library to plot data (lines, maps...) in MFC projects
In this article, you will see a library called PGL that encapsulates plot capabilities in a MFC project for VC6 and VC7. It can easily plot data generated in a project without the need of any external software.
/*
Plot Graphic Library,
a C++/MFC charting library.

  Copyright (C) 2001  de Halleux Jonathan

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Contact: de Halleux Jonathan, pglinfo@patabelgos.org
*/
// mouse.h: interface for the CPGLMouse class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PGLMOUSE_H__338966CD_1C93_11D4_8D89_00409503B978__INCLUDED_)
#define AFX_PGLMOUSE_H__338966CD_1C93_11D4_8D89_00409503B978__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/*!\brief A mouse.

  Takes care of handling the mouse moves or pressed buttons.
*/
class PGL_EXT_CLASS CPGLMouse  
{
public:
	/// default constructor
	CPGLMouse()
	{ m_bLDown=m_bRDown=m_bLMoving=m_bRMoving=FALSE;};
	/// destructor
	~CPGLMouse()
	{};
	
	/// the left button has been pressed at position x,y
	void LeftBtnPressed(int x,int y)
	{ m_iCLBx=m_iLBx=x; m_iCLBy=m_iLBy=y; m_bLDown=TRUE;};
	/// the right button has been pressed at position x,y
	void RightBtnPressed(int x,int y)
	{ m_iCRBx=m_iRBx=x; m_iCRBy=m_iRBy=y; m_bRDown=TRUE;};
	/// the left button has been released, returns x,y as the position of the mouse when clicked
	void LeftBtnReleased(int& x,int& y)
	{ m_bLDown=FALSE; x=m_iCLBx; y=m_iCLBy;};
	/// the left button has been released
	void RightBtnReleased(int& x,int& y)
	{ m_bRDown=FALSE; x=m_iCRBx; y=m_iCRBy;};

	/// returns true if left button down. In that case, _x,_y is the last mouse position
	BOOL IsLeftBtnDown(int& _x,int &_y)
	{ if (m_bLDown) {_x=m_iLBx; _y=m_iLBy;} return m_bLDown;};
	/// returns true if right button down. In that case, _x,_y is the last mouse position
	BOOL IsRightBtnDown(int& _x,int &_y)
	{ if (m_bRDown) {_x=m_iRBx; _y=m_iRBy;} return m_bRDown;};

	void GetLeftLastPos(int& _x, int& _y) const
	{ _x=m_iLBx; _y=m_iLBy;};
	void GetRightLastPos(int& _x, int& _y) const
	{ _x=m_iRBx; _y=m_iRBy;};
	void GetLeftFirstPos(int& _x, int& _y) const
	{ _x=m_iCLBx; _y=m_iCLBy;};
	void GetRightFirstPos(int& _x, int& _y) const
	{ _x=m_iCRBx; _y=m_iCRBy;};

	void UpdateLeftPos(int _x, int _y)
	{ m_iLBx=_x; m_iLBy=_y;};
	void UpdateRightPos(int _x, int _y)
	{ m_iRBx=_x; m_iRBy=_y;};

	void LeftMove() { m_bLMoving=TRUE;};
	void RightMove() { m_bLMoving=TRUE;};
	void Stop() { m_bLMoving=m_bRMoving=FALSE;};
	BOOL IsLeftMoving() const {return (m_bLMoving && m_bLDown);};
	BOOL IsRightMoving() const {return (m_bLMoving && m_bRDown);};

protected:
	/// position of the pointer when the left button was clicked
	int m_iCLBx,m_iCLBy;
	/// position of the pointer when the right button was clicked
	int m_iCRBx,m_iCRBy;
	/// last position of the pointer
	int m_iLBx,m_iLBy;
	/// position of the pointer
	int m_iRBx,m_iRBy;
	/// true if left button pressed
	BOOL m_bLDown;
	/// true if right button pressed
	BOOL m_bRDown;
	/// true if mouse moving with left button down
	BOOL m_bLMoving;
	/// true if mouse moving with left button down
	BOOL m_bRMoving;
};

#endif // !defined(AFX_MOUSECLASS_H__338966CD_1C93_11D4_8D89_00409503B978__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 GNU Lesser General Public License (LGPLv3)


Written By
Engineer
United States United States
Jonathan de Halleux is Civil Engineer in Applied Mathematics. He finished his PhD in 2004 in the rainy country of Belgium. After 2 years in the Common Language Runtime (i.e. .net), he is now working at Microsoft Research on Pex (http://research.microsoft.com/pex).

Comments and Discussions