为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作!

chencheng8095 2010-05-23 12:29:28
//代码
if(dlg.DoModal()==IDOK)
{
dlg.GetDlgItemText(IDC_EDIT_USER,strName);
// dlg.GetDlgItemText(IDC_EDIT_PW,strPw);

// dlg.m_strName
}
else
{
..............
}
...全文
234 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcyw 2010-06-02
  • 打赏
  • 举报
回复
windows_star
和 zhupf

都说的很明白了, 我就不多说了
向立天 2010-05-31
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
chencheng8095 2010-05-23
  • 打赏
  • 举报
回复
那我该怎么来写个登陆框,请指点一二。。。非常谢谢。帮你加分!
robertcarlos 2010-05-23
  • 打赏
  • 举报
回复
DoModal之后,你的对话框已经销毁,而你又在试图访问窗口数据,所以出错。
chencheng8095 2010-05-23
  • 打赏
  • 举报
回复
请高手指点迷津啊!!!很晚了,有哪个高手快点告诉我噢。感激不尽。
zhupf52 2010-05-23
  • 打赏
  • 举报
回复
不说害怕 2010-05-23
  • 打赏
  • 举报
回复
CDialog类是个C++类,构造完不会创建窗口..之后再创建窗口.
DoModal完成后.窗口销毁...那些窗口的操作函数都不能用了.
可以这样
CDialog theDlg;
if(theDlg.GetSafeHandle())
{
// 窗口还在
// 可以对窗口操作
}
否则只能给CDialog类添加成员来保存窗口的信息.在窗口关闭的时候,保存窗口里的数据.
等销毁后.取出这些成员就可以了.

同样初始化的时候,可以通过传递值给它的成员,然后在对话框类的相关初始化函数里更新窗口显示的数据.

void CtestdlgDlg::OnBnClickedButton1()
{
CDlg dlg;
dlg.m_Edit = _T("初始化的值");
if(dlg.DoModal() == IDOK)
{
AfxMessageBox(dlg.m_Edit); // 这个是新值
}
}


索隆考研 2010-05-23
  • 打赏
  • 举报
回复
楼上正解
windows_star 2010-05-23
  • 打赏
  • 举报
回复
void CtestdlgDlg::OnBnClickedButton1()
{
CDlg dlg;
if(dlg.DoModal() == IDOK)
{
AfxMessageBox(dlg.m_Edit);
}
}
windows_star 2010-05-23
  • 打赏
  • 举报
回复
在DLG里面定义两个成员变量,分别保存两个字符串。

窗口虽然销毁了,但是DLG这个类的的实例还在,你可以关联EDIT控件为CString类型。
然后dlg.m_Edit;


可以的,实验已经通过。
尹成 2010-05-23
  • 打赏
  • 举报
回复
把数据存放于全局的一个变量中

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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