📄 fdraw.cpp
字号:
// Fdraw.cpp : 实现文件
//
//提供方块的画图 13个象素一个单元格 12个象素一个填充格
#include "stdafx.h"
#include "fangk.h"
#include "Fdraw.h"
// Fdraw
Fdraw::Fdraw()
{
//初始化颜色、方格
for(int i=0;i<ROW;i++)
for(int j=0;j<LINE;j++)
{
Datas[i][j] = true;
Cor[i][j] = GetSysColor(COLOR_3DFACE);
}
//初始化形状数组
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
m_nData[i][j]=0;
}
Fdraw::~Fdraw()
{
}
void Fdraw::drawcell(CDC * pDC,int Col,int Row,COLORREF crColor)
{
CPoint point;
point.x = 13*Row;
point.y = 13*Col;
drawcell(pDC,point,crColor);
}
void Fdraw::drawcell(CDC *pDC,CPoint point,COLORREF crColor)
{
CBrush brush;
brush.CreateSolidBrush(crColor);
CPen penGray(PS_SOLID,1,RGB(0,0,0));
CPen penWhite(PS_SOLID,1,RGB(255,255,255));
CPen *pOld = NULL;
CPoint topleft = point;
CPoint buttonright;
buttonright.x = point.x+CELL;
buttonright.y = point.y+CELL;
CRect rect(topleft,buttonright);
pOld = pDC->SelectObject(&penWhite);
pDC->FillRect(&rect,&brush);
pDC->MoveTo(point);
pDC->LineTo(point.x,point.y+=CELL);
pOld = pDC->SelectObject(&penGray);
pDC->LineTo(point.x+=CELL,point.y);
pDC->LineTo(point.x,point.y-=CELL);
pOld = pDC->SelectObject(&penWhite);
pDC->LineTo(point.x-=CELL,point.y);
}
void Fdraw::drawnull(CDC *pDC,CPoint point)
{
CPoint topleft = point;
CPoint buttonright;
buttonright.x = point.x+13;
buttonright.y = point.y+13;
CRect rect(topleft,buttonright);
CBrush brush;
brush.CreateSolidBrush(GetSysColor(COLOR_3DFACE));
pDC->FillRect(&rect,&brush);
}
void Fdraw::drawnull(CDC *pDC,int line,int row)
{
CPoint x(row*13,line*13);
drawnull(pDC,x);
}
void Fdraw::getdata(int Shape,int ID)
{
//存放颜色和变化的中间数据
int nData[][4] = {
{ 0x038, 0x092, 0x038, 0x092 },
{ 0x093, 0x03c, 0x192, 0x078 },
{ 0x096, 0x138, 0x0d2, 0x039 },
{ 0x1b0, 0x1b0, 0x1b0, 0x1b0 },
{ 0x198, 0x05a, 0x198, 0x05a },
{ 0x0f0, 0x099, 0x0f0, 0x099 },
{ 0x03a, 0x0b2, 0x0b8, 0x09a }
};
int Data = nData[Shape][ID];
//取得形状数组
m_nData[0][0] = (Data&0x100)>>8;
m_nData[0][1] = (Data&0x80)>>7;
m_nData[0][2] = (Data&0x40)>>6;
m_nData[1][0] = (Data&0x20)>>5;
m_nData[1][1] = (Data&0x10)>>4;
m_nData[1][2] = (Data&0x8)>>3;
m_nData[2][0] = (Data&0x4)>>2;
m_nData[2][1] = (Data&0x2)>>1;
m_nData[2][2] = (Data&0x1)>>0;
}
void Fdraw::drawshape(CDC *pDC,CPoint point,SHAPE shape,int ID,bool overwrite)
{
getdata(shape,ID);
CPoint DPoint;
//获取各图形的颜色
crColor[0] = RGB(92,88,146);
crColor[1] = RGB(75,150,158);
crColor[2] = RGB(73,160,80);
crColor[3] = RGB(147,139,87);
crColor[4] = RGB(152,95,82);
crColor[5] = RGB(151,83,149);
crColor[6] = RGB(114,107,109);
//nRow为y,nCol 为x!!!
for(int nRow = 0;nRow<3;nRow++)
for(int nCol = 0;nCol<3;nCol++)
{
if(m_nData[nRow][nCol])
{
DPoint.x = point.x+nCol*13;
DPoint.y = point.y+nRow*13; // 求出画图的x. y点
if(overwrite)
drawnull(pDC,DPoint);
else
drawcell(pDC,DPoint,crColor[shape]);
}
}
//此时,竖条只有3块,需要新增加一块
if(shape==0)
{
if(ID==1||ID==3) //竖
{
DPoint.y -=39;
if(overwrite)
drawnull(pDC,DPoint);
else
drawcell(pDC,DPoint,crColor[shape]);
}
else //横
{
DPoint.x +=13;
if(overwrite)
drawnull(pDC,DPoint);
else
drawcell(pDC,DPoint,crColor[shape]);
}
}
}
void Fdraw::drawshape(CDC *pDC,int Col,int Row,SHAPE shape,int ID,bool overwrite)
{
CPoint point;
point.x = Col*13;
point.y = Row*13;
drawshape(pDC,point,shape,ID,overwrite);
}
void Fdraw::drawmark(CDC *pDC,int mark,bool overwrite)
{
CRect rect(150,80,200,150);
pDC->FillRect(rect,&CBrush(GetSysColor(COLOR_3DFACE)));
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen = NULL;
pOldPen = pDC->SelectObject(&pen);
pDC->SetBkMode(0);
CString str,level;
str.Format("%d",mark);
level.Format("%d",mark/100);
str = "分数:"+str;
level = "级别:"+level;
pDC->TextOut(150,80,str);
pDC->TextOut(150,100,level);
}
// Fdraw 成员函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -