注册 登录
编程论坛 VC++/MFC

固高机器人界面中一点点代码的疑惑,望大神解答

飞漩鸣人 发布于 2015-04-04 19:30, 1131 次点击
下面两句话什么意思啊,尤其是不懂这种用法,怎么去理解啊 ,谢谢大神解答了
((CDEyesRobotDlg*)AfxGetMainWnd())->m_Robot.motionstep=1;
((CDEyesRobotDlg*)AfxGetMainWnd())->m_bMotionErr=false;
2 回复
#2
天使梦魔2015-04-08 16:02
AfxGetMainWnd被强制转换成CDEyesRobotDlg类,转换后对成员进行定义,由于转换的是指针而不是实例,所以只能用->符对地址进行操作。
该转换说明AfxGetMainWnd返回值也是一个类结构,而且具有CDEyesRobotDlg父继承属性。CDEyesRobotDlg必须大于或等于AfxGetMainWnd返回值的成员结构
#3
AleTiff2015-04-10 11:40
看上去好像是对机器人进行状态设置。第一句,是将机器人动作状态设置为 1,第二句是清除机器人动作执行错误,以便后续动作执行过程中,可以检测到动作错误。

这种代码的书写方法,本质上就是需要访问机器人的这几个状态值,而这几个状态值,存在于 CDEyesRobotDlg 对话框类实例里,由于当前代码范围里,没有直接的 CDEyesRobotDlg 实例存在,但通过 AfxGetMainWnd() 函数可以获取到表征着 CDEyesRobotDlg 实例的指针。那么,根据类型强制转换原理,只要把获取到的实例指针,强硬地告诉编译器,这个就是 CDEyesRobotDlg 的实例指针,编译器就只好按照这样的要求,来理解返回的指针了。于是,对后续那几个状态值的操作,编译器就会认可。

嗯,当然,如果这种强硬的指示编译器去理解的做法中,实际上传回的确实不是 CDEyesRobotDlg 实例指针的话,编译器也是不管的,由此,通常你会得到一个异常消息,程序中断。
1