关于消息框的困惑

ykwfly 2009-06-17 12:56:03
一个五子棋程序
在构造函数中载入棋子位图!!
CGobangView::CGobangView()
{
// TODO: add construction code here
m_hcurBlack = AfxGetApp ()->LoadCursor (IDC_CURSOR2);
m_hcurWhite = AfxGetApp ()->LoadCursor (IDC_CURSOR1);

m_bmpWhite.LoadBitmap (IDB_WHITE);
m_bmpBlack.LoadBitmap (IDB_BLACK);

//清理棋盘 数组值为0表示没有棋子
for (int i=0; i<15; i++)
for (int j=0; j<15; j++)
wzq[i][j] = 0;

//白棋先下
m_bWhite = TRUE;
}

在OnDraw函数中实现绘图棋子的绘制
void CGobangView::OnDraw(CDC* pDC)
{
CGobangDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
// Draw background
CBrush brush;
brush.CreateSolidBrush (RGB(0, 255, 255));
CRect rect;
GetClientRect (&rect);
pDC->FillRect (&rect, &brush);

/* //画棋盘
CPen pen;
CPen *pOldPen;
pen.CreatePen (PS_SOLID, 1, RGB (0, 0, 0));
pOldPen = pDC->SelectObject (&pen);
*/
for (int i=0; i<15; i++)
{
// 行
pDC->MoveTo (50, 50 + i*20);
pDC->LineTo (330, 50 + i*20);
// 列
pDC->MoveTo (50 + i*20, 50);
pDC->LineTo (50 + i*20, 330);
}

// 重画时显示存在的棋子 数组值为1表示白棋 -1表示黑棋
CDC dc;
if (dc.CreateCompatibleDC (pDC) == FALSE)
MessageBox ("Can't create DC");
for (int n=0; n<15; n++)
for (int m=0; m<15; m++)
if (wzq[n][m] == 1)
{
dc.SelectObject (m_bmpWhite);
pDC->BitBlt (n*20+40, m*20+40, 160, 160, &dc, 0, 0, SRCCOPY);
}

else if (wzq[n][m] == -1)
{
dc.SelectObject (m_bmpBlack);
pDC->BitBlt (n*20+40, m*20+40, 160, 160, &dc, 0, 0, SRCCOPY);
}


}

现在问题来了 程序在胜利的时候弹出一个消息框提示胜利 (消息框式用MessageBox调用的 后来换了成对话框资源也一样)我拖动消息框时 后面的主窗口棋盘上的子会乱绘制(如果是白的胜利的话全变黑的 如果是黑的胜利的话全变白的)
不是在拖动时会发生重绘吗 那按我的代码应该黑的是黑的 白的是白的啊 我用菜单的”关于“对话框拖动就不会有问题 反正发生别的重绘时棋盘上的子还是保持原样 不会有问题 只有这个胜利提示消息框拖动就会导致棋盘上的子乱绘 谁知道什么情况吗 我都快烦死了!!
...全文
26 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ky310 2009-06-17
  • 打赏
  • 举报
回复
要重点检查一下胜利后相关数组的赋值,MESSAGEBOX弹出移动会触发ONDRAW事件重新调用
TOTTI-10 2009-06-17
  • 打赏
  • 举报
回复
是啊,跟踪一下就知道了
wanyuzhen 2009-06-17
  • 打赏
  • 举报
回复
支持5楼
一方胜利后,你是如何处理的?
很可能改变了wzq数组,
liangxd09 2009-06-17
  • 打赏
  • 举报
回复
这种事 只能跟一根 就出来了
陈清平 2009-06-17
  • 打赏
  • 举报
回复
.mark
HellowKitty 2009-06-17
  • 打赏
  • 举报
回复
我估计是不是胜利以后wzq数组内容发生了变化了?
coohai 2009-06-17
  • 打赏
  • 举报
回复
如果变乱了,跟踪一下重绘,看看是什么数据发生的问题。
jian_tian_yang 2009-06-17
  • 打赏
  • 举报
回复
帮楼主顶一下
ahytufc 2009-06-17
  • 打赏
  • 举报
回复
榜定~
softist 2009-06-17
  • 打赏
  • 举报
回复
提示胜利消息框的时候,查一下 wzq[][]的内容。
这个错误与窗口描画没有关系,用该是逻辑错误 或 内存错误。
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ykwfly 的回复:]
我在OnDraw里设断点调试 程序直接死掉 不能操作 只能退出调试啊
[/Quote]

应该是胜利后你的代码处理有问题,可能非法调用不存在的指针或数组越界等等
bulijun1987 2009-06-17
  • 打赏
  • 举报
回复
我觉得你的数据操作的代码没有问题,很可能是你的对数据(数组)赋值的操作出现了问题。极有可能啊!仔细检查一下程序中对这个数组赋值的所有语句。
ykwfly 2009-06-17
  • 打赏
  • 举报
回复
怎么没人啊!!
ykwfly 2009-06-17
  • 打赏
  • 举报
回复
我在OnDraw里设断点调试 程序直接死掉 不能操作 只能退出调试啊
Ryanwen 2009-06-17
  • 打赏
  • 举报
回复
MESSAGEBOX弹出移动后断点进OnDraw看看数组值是否改变,先测试看看再说问题,说不定就是这个问题,试一下又不要多长时间
reneeland 2009-06-17
  • 打赏
  • 举报
回复
关注~~~~~~~~~
ykwfly 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 huwentao_totti 的回复:]
是啊,跟踪一下就知道了
[/Quote]
怎么跟踪?? 我不太懂调试 而且我的调试器好像坏了 只能跟一步程序就死了!!
ykwfly 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wanyuzhen 的回复:]
支持5楼
一方胜利后,你是如何处理的?
很可能改变了wzq数组,
[/Quote]
我没做什么处理啊 就是直接弹出消息框 为什么会变呢??

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧