0

现在,我在两个对话框中有两个结构如下

GetDialog.h
struct GetDlgData{
int     nStatic1;
int     nStatic2;
CString strEdit1;   
CString strEdit2;       
};
GetDlgData g_structData;
CStatic m_staticGet1;
CStatic m_staticGet2;
CEdit m_editGet1;
CEdit m_editGet2;
void SetGetValue();
GetDlgData GetGetValue(){return g_structData;}
virtual BOOL OnInitDialog();

DoModalGetDataDlg.h
struct DoData {
  int   nStatic1;
  int   nStatic2;
  CString strEdit1; 
  CString strEdit2;     
};
CStatic m_staticDo1;
CStatic m_staticDo2;
CEdit m_editDo1;
CEdit m_editDo2;
DoData g_structData;
void SetDoValue();  
DoData GetDoValue() { return g_structData;}
afx_msg void OnBnClickedButtonDo();

我想将值发送到另一个对话框,该对话框保存在结构中

DoModalGetDataDlg.cpp
void CDoModalGetDataDlg::SetDoValue()
{
CString strTemp;

strTemp.Empty();
m_staticDo1.GetWindowText(strTemp);
g_structData.nStatic1 = _ttoi(strTemp);

strTemp.Empty();
m_staticDo2.GetWindowText(strTemp);
g_structData.nStatic2 = _ttoi(strTemp);

m_editDo1.GetWindowText(g_structData.strEdit1);

m_editDo2.GetWindowText(g_structData.strEdit2);
}

void CDoModalGetDataDlg::OnBnClickedButtonDo()
{
DoData structData;
SetDoValue();

CGetDialog GetDlg;
GetDlg.DoModal();
}

在对话框初始化时获取 GetDlg.cpp 中的数据

BOOL CGetDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetGetValue();

return TRUE;  // return TRUE unless you set the focus to a control
}

void CGetDialog::SetGetValue()
{
 CDoModalGetDataDlg DoDlg(AfxGetMainWnd());
 memcpy(&g_structData, &DoDlg.GetDoValue(), sizeof(GetDlgData));

 CString strTemp;
 strTemp.Empty();
 strTemp.Format(_T("%d"), g_structData.nStatic1);
 m_staticGet1.SetWindowText(strTemp);

 strTemp.Empty();
 strTemp.Format(_T("%d"), g_structData.nStatic2);
 m_staticGet2.SetWindowText(strTemp);

 m_editGet1.SetWindowText(g_structData.strEdit1);

 m_editGet2.SetWindowText(g_structData.strEdit2);
}

但该值是随机的,在 memcpy 区域。我该如何解决它...

多谢!

4

1 回答 1

0

您调用CDoModalGetDataDlg DoDlg(AfxGetMainWnd());创建 的新实例CDoModalGetDataDlg,它不会“连接”到该类的现有实例。

您可以在调用之前设置值DoModal(),例如

void CDoModalGetDataDlg::OnBnClickedButtonDo()
{   DoData structData;
    SetDoValue();

    CGetDialog GetDlg;
    memcpy(&GetDlg.g_structData, &GetDoValue(), sizeof(GetDlgData));
    GetDlg.DoModal();
}
于 2013-06-21T07:45:17.267 回答