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

📄 optionzone.cpp

📁 简单的画笔程序 完全由自己编写的
💻 CPP
字号:
// OptionZone.cpp: implementation of the COptionZone class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "LY16paint.h"
#include "OptionZone.h"

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

//////////////////////////////////////////////////////////////////////
// class COptionZone

COptionZone::COptionZone()
{
	m_rcZone = CRect(8, 200, 49, 266);
	InitPenWidth();
	InitRectType();
}

void COptionZone::InitPenWidth()
{
	m_nPenWidthSelNum = 5;
	m_prcSelPenWidth = new CRect[m_nPenWidthSelNum];
	m_nPenRowSpace = 11;
	CRect rcPen(m_rcZone.left+3,m_rcZone.top-4,m_rcZone.right-3,m_rcZone.top+6);

	for ( int i=0; i < m_nPenWidthSelNum;i++)
	{
		rcPen.OffsetRect(0,m_nPenRowSpace);
		m_prcSelPenWidth[i] = rcPen;
	}
	m_nPenWidthCurSel = 0;
}

void COptionZone::InitRectType()
{
	m_nRectTypeSelNum = 3;
	m_prcSelRectType = new CRect[m_nRectTypeSelNum];
	m_nRectHeight = 11;
	CRect rcRect(m_rcZone.left+6,m_rcZone.top+7,m_rcZone.right-6,m_rcZone.top+7+m_nRectHeight);
	for (int i=0; i < m_nRectTypeSelNum;i++)
	{
		m_prcSelRectType[i] = rcRect;
		rcRect.OffsetRect(0, 9+m_nRectHeight);
	}
	m_nRectTypeCurSel = 0;
}

COptionZone::~COptionZone()
{
	delete[] m_prcSelPenWidth;
	delete[] m_prcSelRectType;
}

void COptionZone::Draw(CDC* pDC)
{
	pDC->Draw3dRect(&m_rcZone, RGB(100, 100, 100), RGB(255, 255, 255));
	switch ( m_emOptionType )
	{
	case SEL_PENWIDTH:
		DrawPenWidthSel(pDC); 
		break;
	case SEL_RECTTYPE:
		DrawRectTypeSel(pDC);
		break;
	}
}

void COptionZone::SetOptionType(SELTYPE type) 
{
	m_emOptionType = type;
}

void COptionZone::DrawPenWidthSel(CDC* pDC)
{
	int nLineLength = 26;
	int nLineStart = 7;
	for ( int i=0; i < m_nPenWidthSelNum;i++)
	{
		CPen pen;
		CBrush br;
		CBrush* pOldBrush=NULL;
		if ( m_nPenWidthCurSel == i )
		{
			br.CreateSolidBrush(RGB(0,0,125));
			pOldBrush = pDC->SelectObject(&br);
			pDC->Rectangle(&m_prcSelPenWidth[i]);
			pen.CreatePen(PS_SOLID, 1, RGB(255,255,255));
		}
		else
			pen.CreatePen(PS_SOLID, 1, RGB(0,0,0));

		int row = m_rcZone.top + (i+1)*m_nPenRowSpace;
		CPen* pOldPen = pDC->SelectObject(&pen);
		for(int j=0; j <= i;j++)
		{
			pDC->MoveTo(m_rcZone.left+nLineStart,row-i/2);
			pDC->LineTo(m_rcZone.left+nLineStart+nLineLength,row-i/2);
			row++;
		}
		pDC->SelectObject(pOldPen);
		if ( pOldBrush )
			pDC->SelectObject(pOldBrush);
	}
}

void COptionZone::DrawRectTypeSel(CDC* pDC)
{
	int nLineLength = 26;
	int nLineStart = 7;
	int nRowSpace = 11;
	for ( int i=0; i < m_nRectTypeSelNum;i++)
	{
		CPen pen;
		if ( m_nRectTypeCurSel == i )
		{
			CRect rcSel = m_prcSelRectType[i];
			rcSel.InflateRect(3,4);
			CBrush br;
			br.CreateSolidBrush(RGB(0,0,125));
			CBrush* pOldBrush = pDC->SelectObject(&br);
			pDC->Rectangle(&rcSel);
			pDC->SelectObject(pOldBrush);

			pen.CreatePen(PS_SOLID, 1, RGB(255,255,255));
		}
		else
			pen.CreatePen(PS_SOLID, 1, RGB(0,0,0));

		CBrush br;
		CBrush* pOldBrush=NULL;
		CPen* pOldPen = pDC->SelectObject(&pen);
		switch ( i )
		{
		case 0:
			pDC->SelectStockObject( HOLLOW_BRUSH ); 
			break;
		case 1:
			br.CreateSolidBrush(RGB(150,150,150));
			pOldBrush = pDC->SelectObject(&br);
			break;
		case 2:
			br.CreateSolidBrush(RGB(120,120,120));
			pOldBrush = pDC->SelectObject(&br);
			pDC->SelectStockObject( NULL_PEN ); 
			break;
		}

		pDC->Rectangle(&m_prcSelRectType[i]);

		pDC->SelectObject(pOldPen);
		if ( pOldBrush )
			pDC->SelectObject(pOldBrush);
	}
}

BOOL COptionZone::PointToOption(CPoint point)
{

	if ( !m_rcZone.PtInRect(point) )  return FALSE;

	point.y -= m_rcZone.top;
	switch ( m_emOptionType )
	{
	case SEL_PENWIDTH:
		PointToPenWidthSel(point); 
		break;
	case SEL_RECTTYPE:
		PointToRectTypeSel(point);
		break;
	}

	return TRUE;
}

void COptionZone::PointToPenWidthSel(CPoint point)
{
	float part = (float)m_rcZone.Height()/m_nPenWidthSelNum;
	m_nPenWidthCurSel = (int)(point.y/part); 
	m_nPenWidthCurSel = max(0,m_nPenWidthCurSel);
	m_nPenWidthCurSel = min(m_nPenWidthSelNum-1,m_nPenWidthCurSel);
}

void COptionZone::PointToRectTypeSel(CPoint point)
{
	float part = (float)m_rcZone.Height()/(m_nRectTypeSelNum);
	m_nRectTypeCurSel = (int)(point.y/part); 
	m_nRectTypeCurSel = max(0,m_nRectTypeCurSel);
	m_nRectTypeCurSel = min(m_nRectTypeSelNum-1,m_nRectTypeCurSel);
}

⌨️ 快捷键说明

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