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

📄 dcmacro.cpp

📁 这是一个提供给使用遥控器的嵌入式设备开发的一个中文拼音输入法
💻 CPP
字号:
// DCMacro.cpp: implementation of the CDCMacro class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DCMacro.h"
//#include "MyPen.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDCMacro::CDCMacro()
{

}

CDCMacro::~CDCMacro()
{

}

BOOL CDCMacro::IntersectLine(CPoint p1, CPoint p2, CRect r)
{
	CRect tmp, tmpi;

	tmp.TopLeft() = p1; 
	tmp.BottomRight() = CPoint(p2.x + 1, p2.y + 1);
	tmp.NormalizeRect();
	
	BOOL bRet = r.PtInRect(p1) || r.PtInRect(p2) || 
		tmpi.IntersectRect(&r, &tmp) ;

	return bRet;
}

void CDCMacro::Line(CDC *pDC, POINT p1, POINT p2)
{
	POINT pntLine[2];
	pntLine[0] = p1;
	pntLine[1] = p2;
	pDC->Polyline(pntLine, 2);
}

void CDCMacro::Circle(CDC* pDC, POINT c, int r)
{
	pDC->Ellipse(c.x - r, c.y - r, c.x + r, c.y + r);
}

void CDCMacro::RectDiv(CRect &r, double scale)
{
	r.left = (LONG)((double)r.left / scale + 1);
	r.right = (LONG)((double)r.right / scale + 1);
	r.top = (LONG)((double)r.top / scale + 1);
	r.bottom = (LONG)((double)r.bottom / scale + 1);
}

BOOL CDCMacro::IntersectLine(int x1, int y1, int x2, int y2, CRect& r)
{
	CPoint p1(x1, y1);
	CPoint p2(x2, y2);

	return CDCMacro::IntersectLine(p1, p2, r);
}

void CDCMacro::Line(CDC *pDC, int x1, int y1, int x2, int y2)
{
	CPoint p1(x1, y1);
	CPoint p2(x2, y2);

	CDCMacro::Line(pDC, p1, p2);
}

void CDCMacro::CrossLine(CDC *pDC, CRect r)
{
	CDCMacro::Line(pDC, r.left, r.top, r.right, r.bottom);
	CDCMacro::Line(pDC, r.left, r.bottom, r.right, r.top);
}

void CDCMacro::DrawRect(CDC *pDC, CRect r, BOOL bSunken)
{
	DWORD dwRop0 = bSunken ? BLACKNESS : WHITENESS;
	DWORD dwRop1 = bSunken ? WHITENESS : BLACKNESS;
	
	pDC->PatBlt(r.left, r.top, r.Width(), 1, dwRop0);
	pDC->PatBlt(r.left, r.top, 1, r.Height(), dwRop0);

	pDC->PatBlt(r.left, r.bottom, r.Width(), 1, dwRop1);
	pDC->PatBlt(r.right, r.top, 1, r.Height(), dwRop1);
}

void CDCMacro::DrawText(CDC* pDC, CString &s, CPoint &p, UINT nFormat)
{
	CRect r;
	r.TopLeft() = p;
	r.BottomRight() = r.TopLeft();
	r.InflateRect(2, 2, 2, 2);
	pDC->DrawText(s, &r, nFormat);
//	pDC->ExtTextOut(p.x, p.y, ETO_OPAQUE, NULL, s, NULL);
}

void CDCMacro::DrawSolidRect(CDC *pDC, CRect r, COLORREF cf)
{
	CPen pen(PS_SOLID, 2, cf);
	CBrush brush(cf);
	CPen* op = pDC->SelectObject(&pen);
	CBrush* ob = pDC->SelectObject(&brush);
	pDC->Rectangle(&r);
	pDC->SelectObject(op);
	pDC->SelectObject(ob);
	pen.DeleteObject();
	brush.DeleteObject();
}

void CDCMacro::DrawPolygon(CDC* pDC, POINT *pp, int nSum, COLORREF rgbInner, COLORREF rgbOutner)
{
	CBrush brush(rgbInner);
//	CPen pen(PS_SOLID, 0, rgbOutner);
	HPEN pen = ::CreatePen(PS_SOLID, 1, rgbOutner);
	HPEN pop = (HPEN)pDC->SelectObject(pen);
	CBrush* pob = pDC->SelectObject(&brush);
	pDC->Polygon(pp, nSum);
	
	pDC->SelectObject(pob);
	pDC->SelectObject(pop);
	brush.DeleteObject();
	::DeleteObject(pen);
}

void CDCMacro::CircleTrans(CDC *pDC, POINT c, int r, int w, COLORREF clr, COLORREF clrInner)
{
	CDC dcMem;
	BOOL bOk = dcMem.CreateCompatibleDC(pDC);
	if ( bOk ) {
		CRect rBnd(0, 0, 2 * r, 2 * r);
		int r2 = r - w / 2;
		CBitmap bmp;
		bOk = bmp.CreateCompatibleBitmap(pDC, rBnd.Width(), rBnd.Height());
		if ( bOk ) {
			CDC* pMem = &dcMem;
			CBitmap* pob = pMem->SelectObject(&bmp);
			pMem->PatBlt(0, 0, rBnd.Width(), rBnd.Height(), WHITENESS);
			HPEN pen = ::CreatePen(PS_SOLID, w, clr);
			HPEN po = (HPEN)pMem->SelectObject(pen);
			CBrush brush(clrInner);
			CBrush* pobr = pMem->SelectObject(&brush);
			CDCMacro::Circle(pMem, rBnd.CenterPoint(), r2);
#if defined(_WIN32_WCE) && !defined(_MIPS_)
			::TransparentImage(pDC->m_hDC, c.x - rBnd.Width() / 2,
				c.y - rBnd.Height() / 2, rBnd.Width(), rBnd.Height(),
				dcMem.m_hDC, 0, 0, rBnd.Width(), rBnd.Height(),
				RGB(255, 255, 255));
#else
			pDC->BitBlt(c.x - rBnd.Width() / 2,
				c.y - rBnd.Height() / 2,
				rBnd.Width(), rBnd.Height(), pMem,
				0, 0, SRCAND);
#endif
			pMem->SelectObject(po);
			::DeleteObject(pen);
			
			pMem->SelectObject(pob);
			bmp.DeleteObject();

			pMem->SelectObject(pobr);
			brush.DeleteObject();
		} //end if CreateCompatibleBitmap
	}//end if CreateCompatibleDC
	if ( bOk == FALSE ) {
		CDCMacro::Circle(pDC, c, r);
	}
}

⌨️ 快捷键说明

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