⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gfxutils.h

📁 Displaying large amounts of technical data in a chart can be a frustrating task. You can find tons o
💻 H
字号:
#ifndef GFX_UTILS_H
#define GFX_UTILS_H


#include "stdafx.h"

// Creates a pen within the constructor,
// selects the pen into the DC and
// restores everything when the destructor is called

#define HS_SOLID 6

#pragma warning (disable : 4244)

COLORREF GetColorMono(COLORREF color);

class CDCEx : public CDC
{
private:

	
public:

	CDCEx ();
	virtual ~CDCEx();

	void Prepare(HDC hdc);

	void AdjustRatio(RECT& rect);
	void AdjustRatio(POINT& point);
	void AdjustRatio(int& x, int& y);

	virtual COLORREF SetTextColor(COLORREF crColor);
	virtual COLORREF SetBkColor(COLORREF crColor);
	
	CPoint MoveTo(int x, int y);
	CPoint MoveTo(POINT point);
	BOOL   LineTo(int x, int y);
	BOOL   LineTo(POINT point);
	void   FillRect(LPCRECT lpRect, CBrush* pBrush);
	void   DrawFocusRect(LPCRECT lpRect);
	BOOL   Ellipse(int x1, int y1, int x2, int y2);
	BOOL   Ellipse(LPCRECT lpRect);
	BOOL   Polygon(LPPOINT lpPoints, int nCount);
	BOOL   Rectangle(int x1, int y1, int x2, int y2);
	BOOL   Rectangle(LPCRECT lpRect);
	int    DrawText(const CString& str, LPRECT lpRect, UINT nFormat);
	void   FillSolidRect(LPCRECT lpRect, COLORREF clr);
	void   FillSolidRect(int x, int y, int cx, int cy, COLORREF clr);
	
	bool   m_bPrepared;
	bool   m_bMono;
	bool   m_bPrinting;
	bool   m_bPrintPreview;
	float  m_fScaleX,
		   m_fScaleY;


};

typedef void  (*lpDrawFunc) (CPoint, int, COLORREF, bool, CDCEx*);

class CRgnEx : public CRgn
{
public:
	CRgnEx() {};
	virtual ~CRgnEx() { DeleteObject(); };

	CRgnEx(const CRgnEx& copy) { CreateRectRgn(0,0,0,0); CopyRgn((CRgn*)(&copy)); };
	operator= (const CRgnEx& copy) { CreateRectRgn(0,0,0,0); CopyRgn((CRgn*) (&copy)); };
};

class CPenSelector
{
	private:
		CPen *m_pPen, *m_poPen;
		CDCEx  *m_pDC;
	public:

	CPenSelector(COLORREF color, int nSize, CDCEx *pDC, UINT nStyle = PS_SOLID)
	{
		m_pDC = pDC;
		if (!m_pDC->m_bPrepared)
			m_pDC->Prepare(m_pDC->m_hDC);

		m_pPen = (CPen*) new CPen(nStyle, pDC->m_bPrinting && nStyle == PS_SOLID ? pDC->m_fScaleX * nSize : nSize,  color);
		m_poPen = m_pDC->SelectObject(m_pPen);
	};

	virtual ~CPenSelector()
	{
		m_pDC->SelectObject(m_poPen);
		m_pPen->DeleteObject();
		delete m_pPen;
	};
};

class CBrushSelector
{
	private:
		CBrush *m_pBrush, *m_poBrush;
		CDCEx  *m_pDC;
	public:

#ifndef _WIN32_WCE
	CBrushSelector(COLORREF color, int nIndex, CDCEx *pDC)
	{
		m_pDC = pDC;
		m_pBrush = (CBrush*) new CBrush(nIndex, color );
		m_poBrush = m_pDC->SelectObject(m_pBrush);
	}
#endif

	CBrushSelector(COLORREF color, CDCEx *pDC)
	{
		m_pDC = pDC;
		m_pBrush = (CBrush*) new CBrush(color);
		m_poBrush = m_pDC->SelectObject(m_pBrush);
	};

	virtual ~CBrushSelector()
	{
		m_pDC->SelectObject(m_poBrush);
		m_pBrush->DeleteObject();
		delete m_pBrush;
	};
};

class CQuickFont : public CFont
{
public :
	CQuickFont(CString cFontName, int nHeight, int nWidth, bool bUnderLine = false)
	{
		CreateFont(nHeight,0,0,0, nWidth, 0,bUnderLine ? 1 : 0,0, DEFAULT_CHARSET,
			       OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
				    DEFAULT_PITCH | FF_DONTCARE, cFontName);
	}

	CQuickFont(LOGFONT* lpLogFont)
	{
		CreateFontIndirect(lpLogFont);
	}

	virtual ~CQuickFont()
	{
		DeleteObject();
	};
};

class CVerticalQuickFont : public CFont
{
public :
	CVerticalQuickFont(CString cFontName, int nHeight, int nWidth, bool bUnderLine = false)
	{
		CreateFont(nHeight,0,900,900, nWidth, 0,bUnderLine ? 1 : 0,0, DEFAULT_CHARSET,
			       OUT_DEFAULT_PRECIS, CLIP_LH_ANGLES, ANTIALIASED_QUALITY,
				    DEFAULT_PITCH | FF_DONTCARE, cFontName);
	}

	CVerticalQuickFont(LOGFONT* lpLogFont)
	{
		CreateFontIndirect(lpLogFont);
	}

	virtual ~CVerticalQuickFont()
	{
		DeleteObject();
	};
};


// Selects a font into the DC when the constructor is called and
// restores everything when the destructor is called

class CFontSelector
{
private:
	CFont  m_PrintFont;
	CFont *m_pFont;
	CDCEx   *m_pDC;
public:

	CFontSelector(CFont* pFont, CDCEx *pDC, bool bAdjust = true)
	{
			m_pDC = pDC;
		if (!m_pDC->m_bPrepared)
			m_pDC->Prepare(m_pDC->m_hDC);

		if (pDC->m_bPrinting && bAdjust)
		{
			LOGFONT logFont;
			pFont->GetLogFont (&logFont);
			logFont.lfHeight = (logFont.lfHeight-1) * pDC->m_fScaleY;
			logFont.lfWidth *= pDC->m_fScaleX;
			m_PrintFont.CreateFontIndirect(&logFont);
			m_pFont = m_pDC->SelectObject(&m_PrintFont);
		}
		else
			m_pFont = m_pDC->SelectObject(pFont);
	}

	virtual ~CFontSelector()
	{
		m_pDC->SelectObject(m_pFont);
		if (m_pDC->m_bPrinting)
			m_PrintFont.DeleteObject();
	}

};

void DrawRect(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawCircle(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawCross(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawLeftTriangle(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawUpTriangle(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawRightTriangle(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawDownTriangle(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawRhombus(CPoint point, int nSize, COLORREF color, bool bInvert, CDCEx* pDC);
void DrawPatternRectangle(CDCEx* pDC, CRect rect, COLORREF crPattern, COLORREF crOutline, UINT nStyle);
void DrawEmptyRect(CDCEx* pDC, CRect rect, COLORREF crColor);

CSize GetTextExtentEx(CDCEx *pDC, CString cTxt);

void DrawAlphaBlendRect(CDCEx* pDC, CRect& rect, COLORREF crColor, BYTE nAlpha);


#pragma warning (default : 4244)

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -