High-speed-Charting-Control/ChartDemo/ChartCtrl/ChartFont.cpp

146 lines
3.3 KiB
C++

/*
*
* ChartFont.cpp
*
* Written by Cédric Moonen (cedric_moonen@hotmail.com)
*
*
*
* This code may be used for any non-commercial and commercial purposes in a compiled form.
* The code may be redistributed as long as it remains unmodified and providing that the
* author name and this disclaimer remain intact. The sources can be modified WITH the author
* consent only.
*
* This code is provided without any garanties. I cannot be held responsible for the damage or
* the loss of time it causes. Use it at your own risks
*
* An e-mail to notify me that you are using this code is appreciated also.
*
*/
#include "stdafx.h"
#include "ChartFont.h"
CChartFont::CChartFont(const TChartString& strFaceName, int iPointSize)
: m_strFaceName(strFaceName), m_iPointSize(iPointSize), m_bItalic(false),
m_bBold(false), m_bUnderline(false), m_bVertical(false), m_Font(), m_bDirty(true),
m_pOldFont(NULL)
{
}
CChartFont::CChartFont(const CChartFont& copy)
{
*this = copy;
}
CChartFont::CChartFont()
: m_strFaceName(_T("Microsoft Sans Serif")), m_iPointSize(100), m_bItalic(false),
m_bBold(false), m_bUnderline(false), m_bVertical(false), m_Font(), m_bDirty(true),
m_pOldFont(NULL)
{
}
CChartFont::~CChartFont()
{
m_Font.DeleteObject();
}
/*CFont* CChartFont::GetFont(CDC* pDC)
{
if (!m_pFont)
m_pFont = new CFont();
if (m_bDirty)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = m_iPointSize;
_tcscpy_s(lf.lfFaceName,LF_FACESIZE-1 , m_strFaceName.c_str());
lf.lfItalic = m_bItalic;
lf.lfUnderline = m_bUnderline;
if (m_bBold)
lf.lfWeight = FW_BOLD;
else
lf.lfWeight = FW_NORMAL;
m_pFont->CreatePointFontIndirect(&lf, pDC);
}
return m_pFont;
}*/
void CChartFont::operator=(const CChartFont& objectSrc)
{
m_strFaceName = objectSrc.m_strFaceName;
m_iPointSize = objectSrc.m_iPointSize;
m_bItalic = objectSrc.m_bItalic;
m_bBold = objectSrc.m_bBold;
m_bUnderline = objectSrc.m_bUnderline;
m_bVertical = objectSrc.m_bVertical;
m_bDirty = true;
}
void CChartFont::SelectFont(CDC* pDC) const
{
if (m_bDirty)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = m_iPointSize;
#ifdef _CRT_INSECURE_DEPRECATE
_tcscpy_s(lf.lfFaceName,LF_FACESIZE-1 , m_strFaceName.c_str());
#else
_tcscpy(lf.lfFaceName, m_strFaceName.c_str());
#endif
lf.lfItalic = m_bItalic;
lf.lfUnderline = m_bUnderline;
if (m_bBold)
lf.lfWeight = FW_BOLD;
else
lf.lfWeight = FW_NORMAL;
if (m_bVertical)
{
lf.lfOrientation = 900;
lf.lfEscapement = 900;
}
m_Font.DeleteObject();
m_Font.CreatePointFontIndirect(&lf, pDC);
m_bDirty = false;
}
m_pOldFont = pDC->SelectObject(&m_Font);
}
void CChartFont::UnselectFont(CDC* pDC) const
{
ASSERT(m_pOldFont);
pDC->SelectObject(m_pOldFont);
m_pOldFont = NULL;
}
void CChartFont::SetFont(const TChartString& strFaceName,
int iPointSize,
bool bItalic,
bool bBold,
bool bUnderline)
{
m_strFaceName = strFaceName;
m_iPointSize = iPointSize;
m_bItalic = bItalic;
m_bBold = bBold;
m_bUnderline = bUnderline;
m_bDirty = true;
}
void CChartFont::SetVertical(bool bVertical)
{
m_bVertical = bVertical;
m_bDirty = true;
}