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);
}
这个是对鼠标弹起消息的响应,请高手看看,为什么棋子不出现,而且数组的值也没有变,就好像这个函数根本没有响应一样

解决方案 »

  1.   

    好像你的重绘了啊,你的OnDraw里是什么样子呢?
                  CPoint OverPoint;
                OverPoint.x=px*40+40;
                OverPoint.y=py*40+60;
                
                Invalidate();这句去掉你试试
      

  2.   

    囧,你在OnLButtonDown中绘图,那你窗口一刷新,不是啥都没了
      

  3.   

    谢谢了,目的就是要重绘,重绘的时候会把存在的棋子加载上去,这个是Onpaint函数的内容
    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();
    }
    麻烦大家看看了……感觉不是刷新之后才没有,而是在点击之后根本就没有任何反应