void CShinRenjuDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CPaintDC dc(this);
//CRect rect;
//GetClientRect(&rect); //CDC *pDC=GetDC();
//CDC Dc;
//Dc.CreateCompatibleDC(pDC); CClientDC dc(this);
//判断是否在棋盘内
if(point.x>40&&point.x<520&&point.y>60&&point.y<540)
{
//转换成数组坐标:(40,60)为棋盘第一个点的像素坐标 int px=(point.x-40)/40;
int py=(point.y-60)/40;
//判断是否已经有棋子
if(ColorWhite==TRUE&&Renju[px][py]==0)
{
//创建白棋位图刷子并绘制
CDC dcWhite;
dcWhite.CreateCompatibleDC(&dc);
dcWhite.SelectObject(m_bmWhite);
dc.BitBlt(px*40+40,py*40+60,160,160,&dcWhite,0,0,SRCCOPY); //Dc.SelectObject(m_bmWhite);
//pDC->BitBlt(px*40+40,py*40+60,36,36,&Dc,0,0,SRCCOPY);
//表示存在白棋
Renju[px][py]=1;
Invalidate(); //检查是否结束
GameOver(point);
//换黑棋下
ColorWhite=FALSE;
} else if(ColorWhite==FALSE&&Renju[px][py]==0)
{
CDC dcBlack;
dcBlack.CreateCompatibleDC(&dc);
dcBlack.SelectObject(m_bmBlack);
dc.BitBlt(px*40+40,py*40+60,160,160,&dcBlack,0,0,SRCCOPY); //Dc.SelectObject(m_bmBlack);
//pDC->BitBlt(px*40+40,py*40+60,36,36,&Dc,0,0,SRCCOPY); //表示存在黑棋
Renju[px][py]=-1; //变数组坐标为棋盘坐标
CPoint OverPoint;
OverPoint.x=px*40+40;
OverPoint.y=py*40+60;
Invalidate(); //检查是否结束
GameOver(OverPoint); //换白棋下
ColorWhite=TRUE;
}
} CDialog::OnLButtonUp(nFlags, point);
}
这个是对鼠标弹起消息的响应,请高手看看,为什么棋子不出现,而且数组的值也没有变,就好像这个函数根本没有响应一样
{
// TODO: Add your message handler code here and/or call default
//CPaintDC dc(this);
//CRect rect;
//GetClientRect(&rect); //CDC *pDC=GetDC();
//CDC Dc;
//Dc.CreateCompatibleDC(pDC); CClientDC dc(this);
//判断是否在棋盘内
if(point.x>40&&point.x<520&&point.y>60&&point.y<540)
{
//转换成数组坐标:(40,60)为棋盘第一个点的像素坐标 int px=(point.x-40)/40;
int py=(point.y-60)/40;
//判断是否已经有棋子
if(ColorWhite==TRUE&&Renju[px][py]==0)
{
//创建白棋位图刷子并绘制
CDC dcWhite;
dcWhite.CreateCompatibleDC(&dc);
dcWhite.SelectObject(m_bmWhite);
dc.BitBlt(px*40+40,py*40+60,160,160,&dcWhite,0,0,SRCCOPY); //Dc.SelectObject(m_bmWhite);
//pDC->BitBlt(px*40+40,py*40+60,36,36,&Dc,0,0,SRCCOPY);
//表示存在白棋
Renju[px][py]=1;
Invalidate(); //检查是否结束
GameOver(point);
//换黑棋下
ColorWhite=FALSE;
} else if(ColorWhite==FALSE&&Renju[px][py]==0)
{
CDC dcBlack;
dcBlack.CreateCompatibleDC(&dc);
dcBlack.SelectObject(m_bmBlack);
dc.BitBlt(px*40+40,py*40+60,160,160,&dcBlack,0,0,SRCCOPY); //Dc.SelectObject(m_bmBlack);
//pDC->BitBlt(px*40+40,py*40+60,36,36,&Dc,0,0,SRCCOPY); //表示存在黑棋
Renju[px][py]=-1; //变数组坐标为棋盘坐标
CPoint OverPoint;
OverPoint.x=px*40+40;
OverPoint.y=py*40+60;
Invalidate(); //检查是否结束
GameOver(OverPoint); //换白棋下
ColorWhite=TRUE;
}
} CDialog::OnLButtonUp(nFlags, point);
}
这个是对鼠标弹起消息的响应,请高手看看,为什么棋子不出现,而且数组的值也没有变,就好像这个函数根本没有响应一样
CPoint OverPoint;
OverPoint.x=px*40+40;
OverPoint.y=py*40+60;
Invalidate();这句去掉你试试
void CShinRenjuDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint(); CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
if(GameStart==FALSE){//加载ShinRenju Dailog的封面
CDC dcCover;
dcCover.CreateCompatibleDC(&dc);
dcCover.SelectObject(m_bmCover);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcCover,0,0,SRCCOPY);
}
//如果开始画棋盘
else
{
CBitmap bmpdot;
bmpdot.LoadBitmap(IDB_BKGROUND_DOT);//加载棋盘
CBrush brushdot;
brushdot.CreatePatternBrush(&bmpdot);
dc.FillRect(&rect,&brushdot); //测试代码
// CDC dcWhite;
// dcWhite.CreateCompatibleDC(&dc);
// dcWhite.SelectObject(m_bmWhite);
// dc.BitBlt(40,60,36,36,&dcWhite,0,0,SRCCOPY);
// CDC dcBlack;
// dcBlack.CreateCompatibleDC(&dc);
// dcBlack.SelectObject(m_bmBlack);
// dc.BitBlt(80,60,36,36,&dcBlack,0,0,SRCCOPY); //重画时显示存在的棋子
for(int n=0;n<13;n++)
for(int m=0;m<13;m++)
{
if(Renju[n][m]==1)
{
//显示白棋
CDC dcWhite;
dcWhite.CreateCompatibleDC(&dc);
dcWhite.SelectObject(m_bmWhite);
dc.BitBlt(n*40+40,m*40+60,36,36,&dcWhite,0,0,SRCCOPY);
}
else if(Renju[n][m]==-1)
{
//显示黑棋
CDC dcBlack;
dcBlack.CreateCompatibleDC(&dc);
dcBlack.SelectObject(m_bmBlack);
dc.BitBlt(n*40+40,m*40+60,36,36,&dcBlack,0,0,SRCCOPY);
}
}
}
}
//Invalidate();
}
麻烦大家看看了……感觉不是刷新之后才没有,而是在点击之后根本就没有任何反应