📄 minebutton.cpp
字号:
// MineButton.cpp: implementation of the CMineButton class.
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "mine.h"
#include "LandMine.h"
extern CPen Pen1,Pen2,Pen3,Pen4,Pen5,Pen6,Pen7;
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
/////////////////////////////////////////////////////////////////////
// Construction/Destruction
/////////////////////////////////////////////////////////////////////
void CMineButton::DrawItem(BOOL bFail)
{
RECT rect;
rect.left = m_nX;
rect.top = m_nY;
rect.right = m_nX+14;
rect.bottom = m_nY+14;
CClientDC ClientDC(m_pParent);
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.SelectStockObject(LTGRAY_BRUSH);
ClientDC.SelectObject(Pen6);
ClientDC.Rectangle(&rect);
//shu color
if(m_nStatus==MS_OPEN || bFail && m_nStatus==MS_FLAG && m_nMineNum>=0)
{
switch(m_nMineNum)
{
case 1:
ClientDC.SetTextColor(RGB(0,128,0));
break;
case 2:
ClientDC.SetTextColor(RGB(0,128,128));
break;
case 3:
ClientDC.SetTextColor(RGB(0,0,128));
break;
case 4:
ClientDC.SetTextColor(RGB(0,128,0));
break;
case 5:
ClientDC.SetTextColor(RGB(128,0,0));
break;
case 6:
ClientDC.SetTextColor(RGB(0,255,0));
break;
case 7:
ClientDC.SetTextColor(RGB(128,128,0));
break;
case 8:
ClientDC.SetTextColor(RGB(255,0,255));
break;
}
char cTmp[2]={0,0};
if(m_nMineNum>0)
{
cTmp[0]=m_nMineNum+'0';
ClientDC.DrawText(cTmp,-1,&rect,DT_CENTER|DT_VCENTER);
}
int nI;
ClientDC.SelectObject(Pen6);
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.SelectStockObject(NULL_BRUSH);
ClientDC.Rectangle(rect.left,rect.top,rect.right+1,rect.bottom+1);
for(nI=rect.left;nI<rect.right+1;nI=nI+2)//set xuxian
ClientDC.SetPixel(nI,rect.bottom+1,RGB(0,128,0));
for(nI=rect.top;nI<rect.bottom+1;nI=nI+2)
ClientDC.SetPixel(rect.right+1,nI,RGB(0,128,0));
if(bFail && m_nStatus==MS_FLAG && m_nMineNum!=-1)
{
ClientDC.SelectObject(Pen4);
ClientDC.MoveTo(rect.left+1,rect.top+1);
ClientDC.LineTo(rect.right-1,rect.bottom-1);
ClientDC.MoveTo(rect.right-1,rect.top+1);
ClientDC.LineTo(rect.left+1,rect.bottom-1);
}
return;
}
if(bFail==1 && m_nMineNum==-1)
{
CBitmap Bitmap;
if(m_nStatus!=MS_EXPLODE)
Bitmap.LoadBitmap(IDB_MINE);
else
Bitmap.LoadBitmap(IDB_MINEEXPLODE);
// draw the whole button
CDC memDC;
memDC.CreateCompatibleDC(&ClientDC);
CBitmap* pOld = memDC.SelectObject(&Bitmap);
if (pOld == NULL)
return; // destructors will clean up
ClientDC.BitBlt(rect.left, rect.top,16,16,
&memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOld);
int nI;
for(nI=rect.left;nI<rect.right+1;nI=nI+2)
ClientDC.SetPixel(nI,rect.bottom+1,RGB(0,0,0));
for(nI=rect.top;nI<rect.bottom+1;nI=nI+2)
ClientDC.SetPixel(rect.right+1,nI,RGB(0,0,0));
return;
}
if (m_nStatus == MS_QUEST)
{
ClientDC.SetTextColor(RGB(0,0,128));
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.DrawText("?",1,&rect,DT_CENTER|DT_VCENTER);
}
else
{
if(m_nStatus == MS_FLAG)
{
CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_FLAG);
// draw the whole button
CDC memDC;
memDC.CreateCompatibleDC(&ClientDC);
CBitmap* pOld = memDC.SelectObject(&Bitmap);
if (pOld == NULL)
return; // destructors will clean up
ClientDC.BitBlt(rect.left, rect.top,14,14,
&memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOld);
}
}
ClientDC.SelectObject(Pen3);
ClientDC.MoveTo(rect.right,rect.top);
ClientDC.LineTo(rect.left,rect.top);
ClientDC.LineTo(rect.left,rect.bottom);
ClientDC.SelectObject(Pen7);
ClientDC.LineTo(rect.right,rect.bottom);
ClientDC.LineTo(rect.right,rect.top);
}
void CMineButton::ButtonDown(int Status)
{
RECT rect;
rect.left = m_nX;
rect.top = m_nY;
rect.right = m_nX+15;
rect.bottom = m_nY+15;
CClientDC ClientDC(m_pParent);
if(Status==1)//当按下时的虚线
{
ClientDC.SelectObject(Pen6);
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.SelectStockObject(NULL_BRUSH);
ClientDC.Rectangle(&rect);
int nI;
for(nI=rect.left;nI<rect.right;nI=nI+2)
ClientDC.SetPixel(nI,rect.bottom,RGB(128,0,0));
for(nI=rect.top;nI<rect.bottom;nI=nI+2)
ClientDC.SetPixel(rect.right,nI,RGB(128,0,0));
}
else
{
ClientDC.SelectObject(Pen6);
ClientDC.MoveTo(rect.left,rect.bottom);
ClientDC.LineTo(rect.right,rect.bottom);
ClientDC.LineTo(rect.right,rect.top+1);
DrawItem(FALSE);
}
}
int CMineButton::OpenMine()
{
if(m_nStatus==MS_NORMAL || m_nStatus==MS_QUEST)
{
if (m_nMineNum != -1)
{
m_nStatus = MS_OPEN;
DrawItem(FALSE);
if(m_nMineNum == 0)
return 0;
else
return 1;
}
else
{
m_nStatus = MS_EXPLODE;
DrawItem(TRUE); //Fail
return -1;
}
}
return 1;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -