请教一个傻傻的问题

beicun 2002-05-06 11:53:35
我是一个VC++的初学者,在完成作业中遇到了一点对我来说莫名其妙的问题。大家帮我一下好吗 ?
问题是这样的:
我用MFC的向导建了一个基于对话框的程序。对话框类为CMazeDlg,其中加入了
两个整型变量
m_exit1,m_exit2,
和一个CString n_name;
分别对应于对话框中的三个个编辑框。在CMazeDlg.cpp文件中的一个按键响应函数中,定义了
对话框对象 CMazeDlg mazedlg;
结构体变量
struct postype{
int r,c;
}exit;

然后
UpdateData(TRUE);
exit.r=m_exit1;
exit.c=m_exit2;

运行是发现exit并没有得到正确的整数值,而用m_name做参数却能正常打开文件。
请这是为什么?

...全文
74 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
beicun 2002-05-06
  • 打赏
  • 举报
回复
成功搞定!
我的程序是不是很差劲,有很多不合理的地方?
算法是老师提供的,图形界面老师没有要求,我是自己想做的,其中的原理不是很明白,所以遇到了很多问题。现在基本上都弄好了,可是成功运行。
beicun 2002-05-06
  • 打赏
  • 举报
回复
对的,我就是在classwizard里添加变量的。手动添加我也会,只是为什么变量定义是灰色的字啊。
shawn_liu 2002-05-06
  • 打赏
  • 举报
回复
编辑控件可在ClassWizard中为其指定一个变量,控件与变量之间的数据交换,将由程序框架完成。
beicun 2002-05-06
  • 打赏
  • 举报
回复
分数我给你了,拿到了吗?
这次真的很谢谢你。VC果然博大精深,以后我一定要努力学习。
shawn_liu 2002-05-06
  • 打赏
  • 举报
回复
将上述代码改变后,已实现了你的预期目的。
另外,
UpdateData(FALSE);

from.r =1;
from.c =1;
term.r =9;
term.c =8;
这一段的顺序到了,应为
from.r =1;
from.c =1;
term.r =9;
term.c =8;
UpdateData(FALSE);
这样,才能对编辑控件进行初始化。

记住,运行程序时,屏幕上显示的对话框就是CMAZEDlg的一个对象,用不着再构造一个。
lshadow 2002-05-06
  • 打赏
  • 举报
回复
不是吧,楼上的,编辑控件真可以是一个int吗?
lshadow 2002-05-06
  • 打赏
  • 举报
回复
对,管理,然后分配分数,在点击给分!
呵呵,等着呢
shawn_liu 2002-05-06
  • 打赏
  • 举报
回复
在你的CMAZEDlg::OnButtonQiujie()中有如下一段:
UpdateData(TRUE);
from.r = mazedlg.m_entra1 ; //坐标位置赋值
from.c = mazedlg.m_entra2 ;
term.r = mazedlg.m_exit1 ;
term.c = mazedlg.m_exit2 ;
但是,此时你在mazedlg对象内部,而m_entra1,m_entra2,m_exit1,m_exit2是mazedlg的数据成员,引用它们时,不用如此。关键的问题在于程序运行时,已经有了一个CMAZEDlg的对象,而你又在这个对象的内部构造了另一个CMAZEDlg对象mazedlg,这是多余的。况且,此对象即没有初始化,也没有显示,所以,此对象的四个整数数据成员均为0。追踪程序可知,mazedlg的窗口句柄为0x00000000。所以你只要改成
UpdateData(TRUE);
from.r = m_entra1 ; //坐标位置赋值
from.c = m_entra2 ;
term.r = m_exit1 ;
term.c = m_exit2 ;
既可
beicun 2002-05-06
  • 打赏
  • 举报
回复
怎么给分?是不是只要在管理里面输入密码,然后点给分就可以了?
lshadow 2002-05-06
  • 打赏
  • 举报
回复
天啊,又是这个问题!
不是你想象的把edit控件的对应变量改成int就能是int,它只能是CEdit和CString的。
如果是CEdit类就:
CString strEdit1,strEdit2;
m_edit1.GetWindowText(strEdit1);
m_edit2.GetWindowText(strEdit2);
edit.r=atoi(strEdit1);
edit.c=atoi(strEdit2);

如果是CString类就:
UpdateData(TRUE);
edit.r=atoi(strEdit1);
edit.c=atoi(strEdit2);

试试吧,记着给分啊
shawn_liu 2002-05-06
  • 打赏
  • 举报
回复
问题已经找到,请容我慢慢打出来。
beicun 2002-05-06
  • 打赏
  • 举报
回复
邮件我发出来了。
我是一个大二的学生,这是我们数据结构的一个作业。在DOS下我搞定了,但是自己看了一点VC,想加个图形界面,结果却出现这样一个小问题。你不用看求迷宫的算法,只要看看CMAZEDlg.cpp里面的那个OnButtonQIUJIE函数就可以了。谢谢!
beicun 2002-05-06
  • 打赏
  • 举报
回复
运行是发现exit并没有得到正确的整数值,而用m_name做参数却能正常打开文件。
请这是为什么?
lshadow 2002-05-06
  • 打赏
  • 举报
回复
你的问题是什么啊?我怎么没有看到一个问号?
beicun 2002-05-06
  • 打赏
  • 举报
回复
等我一下
谢谢!
shawn_liu 2002-05-06
  • 打赏
  • 举报
回复
liukeqin760120@163.net
beicun 2002-05-06
  • 打赏
  • 举报
回复
方便的话我把整个工作区都发给你看看吧。
beicun 2002-05-06
  • 打赏
  • 举报
回复
不是
是在另外一个头文件中定义的
shawn_liu 2002-05-06
  • 打赏
  • 举报
回复
结构提是在你的按键响应函数中定义的吗?

16,472

社区成员

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

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

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