请教如何从FormView中调用Dialog,并将数据带回

flyingba 2019-01-09 11:16:12
建立了一个单文档的基类为CFormView的MFC工程,该工程名为Test。

FormView上放了1个Edit控件,2个Button控件。其ID分别为IDC_EDIT_Display、IDC_BUTTON_Input、IDC_BUTTON_Display。
Edit控件关联一个CEdit型变量m_edit_Display。

布置如下图。


然后添加一个Dialog资源,将其ID改为IDD_DIALOG_Input。右击该Dialog后,添加类,类名为CInput。再在其上放一个Edit控件,其ID为IDC_EDIT_Input,关联一个CEdit变量m_edit_Input。如下图:


回到FormView,双击Button控件IDC_BUTTON_Input,进入TestView.cpp,在其中加上#include "input.h"。在Button点击事件中加入如下语句:

void CTestView::OnBnClickedButtonInput()
{
// TODO: 在此添加控件通知处理程序代码
CInput dlg;
dlg.DoModal();
dlg.m_edit_Input;
m_edit_Display = dlg.m_edit_Input;
}

此时,发生编译错误:
1>c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(1977): error C2248: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)
1> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afx.h(561) : 参见“CObject::operator =”的声明
1> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afx.h(535) : 参见“CObject”的声明
1> 此诊断出现在编译器生成的函数“CCmdTarget &CCmdTarget::operator =(const CCmdTarget &)”中

但如果把最后一句注释掉,如下,则编译正确,没有问题。
void CTestView::OnBnClickedButtonInput()
{
// TODO: 在此添加控件通知处理程序代码
CInput dlg;
dlg.DoModal();
dlg.m_edit_Input;
// m_edit_Display = dlg.m_edit_Input;
}

请教大神,这个问题是什么原因,该如何修改?

谢谢。
...全文
119 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingba 2019-01-09
  • 打赏
  • 举报
回复
按照楼上的指引,搞定了,谢谢楼上。
zgl7903 2019-01-09
  • 打赏
  • 举报
回复
1 m_edit_Input 在头文件中申明为public类型
2 如果要在DoModal后还能访问, m_edit_Input 不能是CEdit类型,因为DoModal后窗体已经销毁。 可以考虑把m_edit_Input修改为CString 类型, DDX_Control 修改为 DDX_Text 关联控件

16,472

社区成员

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

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

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