在MainGobang.cpp文件中添加函数实现
限于文章篇幅,这里只给出了绘制棋盘的函数实现以供参考,其他函数实现可访问:https://github.com/Vaczzy/SimpleGobang中MyGobang_DHK文件夹中MainGobang.cpp文件
CMainGobang::CMainGobang(void)
{}
CMainGobang::~CMainGobang(void)
{
if(pPieces!=NULL)
{
delete []pPieces;
pPieces=NULL;
}
if(pmyRectangle!=NULL)
{
delete []pmyRectangle;
pmyRectangle=NULL;
}
}
//绘制棋盘函数
//后期可添加棋盘大小参数
//控件坐标
void CMainGobang::DrawMainTable(CDC *pDC,CRect rect,int iTableSize)
{
iSize=iTableSize;
//先覆盖背景
CRect Back;
Back.top=rect.top+1;
Back.bottom=rect.bottom-1;
Back.left=rect.left+1;
Back.right=rect.right-1;
pDC->FillSolidRect(&Back,RGB(240,240,240));//填充
//计算每格长度
idx=(((rect.right-rect.left)/(iTableSize+1))>((rect.bottom-rect.top)/(iTableSize+1)))?
(rect.bottom-rect.top)/(iTableSize+1):
(rect.right-rect.left)/(iTableSize+1);
CBrush brush(RGB(0,0,0));
CBrush *OldBrush=pDC->SelectObject(&brush);
int ixp,iyp;//棋盘星坐标
//绘制天元
ixp=(rect.right-rect.left)/2;
iyp=(rect.bottom-rect.top)/2;
pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3);
//绘制星
ixp-=4*idx;
iyp-=4*idx;//左上角
pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3);
iyp+=8*idx;//左下角
pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3);
ixp+=8*idx;//右下角
pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3);
iyp-=8*idx;//右上角
pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3);
pDC->SelectObject(OldBrush);//恢复设备环境中原来的画笔
brush.DeleteObject();//释放绘图资源
//计算棋盘大小并放置于窗口中间
ymin=(rect.bottom-rect.top)/2-(iTableSize-1)/2*idx;
ymax=ymin+(iTableSize-1)*idx;
xmin=(rect.right-rect.left)/2-(iTableSize-1)/2*idx;
xmax=xmin+(iTableSize-1)*idx;
for(int x=xmin;x<=xmax;x+=idx)
{
pDC->MoveTo(x,ymin);
pDC->LineTo(x,ymax);
}
for(int y=ymin;y<=ymax;y+=idx)
{
pDC->MoveTo(xmin,y);
pDC->LineTo(xmax,y);
}
}
step3:在xxxx(xxxx为你创建的工程名)Dlg.cpp中编写与界面有关的代码
这一步主要是编写一些与界面有关的代码
本程序的位置反馈主要添加在OnMouseMove函数中,如下:
限于文章篇幅,文件所有代码可访问:https://github.com/Vaczzy/SimpleGobang 中 MyGobang_DHK文件夹中MyGobang_DHKDlg.cpp文件
//鼠标移动函数
void CMyGobang_DHKDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CPoint pt;
CRect rect;
GetDlgItem(IDC_MainTable)->GetWindowRect(&rect);//获取控件屏幕坐标
GetCursorPos(&pt);//获取鼠标点击坐标(屏幕坐标坐标)
pt.x-=rect.left;//转化为控件中坐标
pt.y-=rect.top;
CDC *pDC=picMain.GetDC();//获取该控件的画布
if(bIsReady)
{
gobang.DrawRectangle(pDC,pt);
}
CDialogEx::OnMouseMove(nFlags, point);
}
程序界面
打开程序










