📄 optionzone.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 + -