/********************************************************************
	created:	2005/06/03
	created:	3:6:2005   13:21
	filename: 	x:\Software\Mfc\Source\Controls\Buttons\RoundButton2.h
	file path:	x:\Software\Mfc\Source\Controls\Buttons
	file base:	RoundButton2
	file ext:	h
	author:		Markus Zocholl
	
	purpose:	CRoundButton2 defines a universal Button-Control with the 
				following features:

				* Shape is a rounded Rectangle
				* Button includes Border and Button-Face
				* Many parameters to get an individual look
				* Functions of Button to be en- or disabled:
					- Button (disabled means a static control with userdefined styles)
					- Hover
*********************************************************************/

#pragma once
#include "afxwin.h"
#include "RoundButtonStyle.h"

class CRoundButton2 :
	public CButton
{
public:
	/************************************************************************/
	/* Con- / Destruction                                                   */
	/************************************************************************/
	//! Constructor
	CRoundButton2(void);
	//! Destructor
	~CRoundButton2(void);

	/************************************************************************/
	/* Functions for Design of Button                                       */
	/************************************************************************/
	//! Set Style of Button
	bool SetRoundButtonStyle(CRoundButtonStyle* _ptRoundButtonStyle);
	//! Get Font of Button
	bool GetFont(LOGFONT* _ptLogFont);
	//! Set Font of Button
	bool SetFont(CFont* _ptCFont);
	bool SetFont(LOGFONT* _ptLogFont);
	//! Get Color of Caption
	bool GetTextColor(tColorScheme* _ptTextColor);
	//! Set Color of Caption
	bool SetTextColor(tColorScheme*	_ptTextColor);

	/************************************************************************/
	/* Access to Functions of Button                                        */
	/************************************************************************/
	//! Button is Check button
	void SetCheckButton(bool _bCheckButton) { m_bIsCheckButton = _bCheckButton; };
	//! Is Button a Check button
	bool GetCheckButton() { return m_bIsCheckButton; };
	//! Button is Radio button
	void SetRadioButton(bool _bRadioButton) { m_bIsRadioButton = _bRadioButton; };
	//! Is Button a Radio button
	bool GetRadioButton() { return m_bIsRadioButton; };
	//! Button is Hot-button
	void SetHotButton(bool _bHotButton) { m_bIsHotButton = _bHotButton; };
	//! Is Button a Hot-button
	bool GetHotButton() { return m_bIsHotButton; };

	//! Change Check-Status of Button
	void SetCheck(bool _bIsChecked) { m_bIsChecked = _bIsChecked; Invalidate(); };
	//! Get Current Check-Status of Button
	bool GetCheck() { return m_bIsChecked; };

	/************************************************************************/
	/* Message-Map of Control                                               */
	/************************************************************************/
	DECLARE_MESSAGE_MAP()
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);

protected:

	/************************************************************************/
	/* Own Drawing-Functions                                                */
	/************************************************************************/

	//! Generate Bitmaps to hold Buttons
	void GenButtonBMPs(CDC* _pDC, CRect _rRect);
	//! Draw Button-Face
	void DrawButtonFace(CDC* _pDC);
	//! Draw Caption on Button
	void DrawButtonCaption(CDC *_pDC);

	/************************************************************************/
	/* Overwritten Functions for Init and Draw of Button                    */
	/************************************************************************/

	//! PreSubclass-Function
	virtual void PreSubclassWindow();
	//! Draw Item-Function
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

private:
	//! Size of Button-Images
	CRect	m_rBtnSize;
	//! Image of Buttons
	CBitmap	m_tBmpBtn;

	//! Font for Caption
	CFont	m_tBtnFont;
	//! Data-Block for Font
	LOGFONT	m_tLogFont;
	//! Color Scheme of Caption
	tColorScheme	m_tTextColor;

	//! Stored Old Caption to recognize the need for a redraw
	CString m_sOldCaption;

	//! Is Button Default-Button
	bool	m_bDefaultButton;
	//! Is Check-Button
	bool	m_bIsCheckButton;
	//! Is Radio-Button
	bool	m_bIsRadioButton;
	//! Is Hot-Button
	bool m_bIsHotButton;
	//! Is Checked
	bool	m_bIsChecked;

	//! The Mouse is on the Button-Area, needed for Hot-Button
	bool m_bMouseOnButton;

	//! Button should be redrawn
	bool	m_bRedraw;

	//! Structure containing Style of Button
	CRoundButtonStyle* m_ptRoundButtonStyle;
public:
	afx_msg void OnCaptureChanged(CWnd *pWnd);
};