如何将父对话框中的变量传递到子对话框中

Scarlett_93 2016-05-17 04:20:58
有这样一个问题,在如图的list control 表中选中一行,其值为nSel
void CJCMXK::OnBnClickedModjc2()
{
int nSel = m_listf.GetSelectionMark();
if (nSel < 0)
{
AfxMessageBox(_T("请选中再修改!"));
return;
}
CMODJC mjc;
mjc.DoModal();
}

再点击修改后,在弹出来的子对话框中,要怎样才能获得父对话框的变量nSel,现在是需要在子对话框中再重新选中一行。
void CMODJC::OnBnClickedModjc()
{
CString szSQL;

int nSel = m_listf.GetSelectionMark();
CString str = m_listf.GetItemText(nSel, 0);

UpdateData();
szSQL.Format(_T("UPDATE dbo.MachineCase SET OrdOrNEW='%s' WHERE MachineType='%s'"), m_mjc01, str);
if (m_ado.ExecSQL(szSQL) < 0)
AfxMessageBox(m_ado.GetLastError());
else
{
AfxMessageBox((_T("修改成功!")));
CDialog:; OnOK();
}
}
...全文
269 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Scarlett_93 2016-05-17
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
第一种方法能说详细点吗,CMODJC类里要怎么接收? ------------------------------- 修改你的CMODJC类的构造函数, 比如
class CMODJC
{
 public:
 CMODJC(int nSel, xxx);

private:
int m_nSel;
};
cpp中构造函数的定义
CMODJC::CMODJC(int nSel, xxx) : m_nSel(nSel)
{}
好的,谢谢
Eleven 2016-05-17
  • 打赏
  • 举报
回复
第一种方法能说详细点吗,CMODJC类里要怎么接收?
-------------------------------
修改你的CMODJC类的构造函数,
比如
class CMODJC
{
public:
CMODJC(int nSel, xxx);

private:
int m_nSel;
};


cpp中构造函数的定义
CMODJC::CMODJC(int nSel, xxx) : m_nSel(nSel)
{}
Scarlett_93 2016-05-17
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
写的好看一点就是重新定义CMODJC类的构造函数,添加一个int类型的参数,用来接收nSel变量,所以你的CMODJC类也要做响应的修改。 CMODJC mjc(nSel); mjc.DoModal(); 不好看就在CMODJC类中定义一个public的int m_nSel,直接赋值,或者定义一个public函数,用来给m_nSel赋值(m_nSel定义为protected/private int m_nSel;) CMODJC mjc; mjc.m_nSel = nSel; // 或者mjc.SetSelValue(nSel); mjc.DoModal(); ------------------------------ 推荐第一种
第一种方法能说详细点吗,CMODJC类里要怎么接收? void CJCMXK::OnBnClickedModjc2() { int nSel = m_listf.GetSelectionMark(); if (nSel < 0) { AfxMessageBox(_T("请选中再修改!")); return; } CMODJC mjc(nSel); mjc.DoModal(); } void CMODJC::OnBnClickedModjc() { CString szSQL; int mSel = nSel; CString str = m_listf.GetItemText(mSel, 0); UpdateData(); szSQL.Format(_T("UPDATE dbo.MachineCase SET OrdOrNEW='%s' WHERE MachineType='%s'"), m_mjc01, str); if (m_ado.ExecSQL(szSQL) < 0) AfxMessageBox(m_ado.GetLastError()); else { AfxMessageBox((_T("修改成功!"))); CDialog:; OnOK(); } }
Eleven 2016-05-17
  • 打赏
  • 举报
回复
写的好看一点就是重新定义CMODJC类的构造函数,添加一个int类型的参数,用来接收nSel变量,所以你的CMODJC类也要做响应的修改。 CMODJC mjc(nSel); mjc.DoModal(); 不好看就在CMODJC类中定义一个public的int m_nSel,直接赋值,或者定义一个public函数,用来给m_nSel赋值(m_nSel定义为protected/private int m_nSel;) CMODJC mjc; mjc.m_nSel = nSel; // 或者mjc.SetSelValue(nSel); mjc.DoModal(); ------------------------------ 推荐第一种
Eleven 2016-05-17
  • 打赏
  • 举报
回复
至于弹出的模态对话框向主窗口可以采用发送消息的方式,AfxGetMainWnd()->PostMessage();主框架窗口添加消息处理函数即可。
puddingli 2016-05-17
  • 打赏
  • 举报
回复
1. extern CMainApp theApp; CMainDlg* dlg = (CMainDlg*)theApp.m_pMainWnd; 获得主对话框指针就可以调用它的成员的 2.主对话框创建子对话框时把this传入,那么在子对话框中就可以得到主对话的指针 3.用GetParent()获取父窗口指针。 设你主对话框类为CMyDialog. CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent(); pDlg->函数或变量; 任选一种

16,471

社区成员

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

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

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