我想把在点击一个按钮把第一个窗口中的编辑框的数据显示在第二个窗口的编辑框或静态文本(Static)中,并且显示第二个窗口。
void CMyDlg::OnBnClickedButtonEntert()
{
// TODO: 在此添加控件通知处理程序代码
MyWenJian hq;
CString str;
CWnd* pWnd1 = GetDlgItem(IDC_EDIT_YH);
         pWnd1->GetWindowText(str);
CWnd* pWnd2 = GetDlgItem(IDC_EDIT_YH2);
pWnd2->SetWindowText(str);//生成时没有错。运行时就出错
  //这边的str该如何处理才能正确的显示在编辑框里呢?
hq.DoModal();}

解决方案 »

  1.   

    CWnd* pWnd1 = GetDlgItem(IDC_EDIT_YH);
    pWnd1->GetWindowText(str);
    CWnd* pWnd2 = GetDlgItem(IDC_EDIT_YH2);
    pWnd2->SetWindowText(str);//这样为什么不行
      

  2.   

    第二个对话框还没有显示,不能直接设置他的控件的值。
    void CMyDlg::OnBnClickedButtonEntert()
    {
    // TODO: 在此添加控件通知处理程序代码
    MyWenJian hq;
    CString str;
    CWnd* pWnd1 = GetDlgItem(IDC_EDIT_YH);
             pWnd1->GetWindowText(str);
             hq.m_strEditYH2 = str;
    hq.DoModal();}//MyWenJian.h
    CString m_strEditYH2;//MyWenJian.cpp
    CMyWenJian::OnInitDialog()
    {
        GetDlgItem(IDC_EDIT_YH2)->SetWindowText(m_strEditYH2);
    }
    //MyWenJian.cpp
      

  3.   

    假设父对话框为CFatherDlg;
    子对话框为CSonDlg,其为CFatherDlg的成员变量; 在CFatherDlg中的变量有:
    public:
         int m_nValue;
         CSonDlg m_SonDlg;在CSonDlg中的变量有:
    public:
        int m_nValue;
        CButton m_btnTansfer;//传递m_nValue到父对话框的m_nValue;为按钮m_btnTansfer添加消息响应函数:
    void CSonDlg::OnButtonTransfer() 
    {
        // TODO: Add your control notification handler code here
        
            UpdateData(TRUE);//根据需要,是否有需要更新的控件变量
            m_nValue=100;//如果m_nValue不是控件变量;
            ((CFatherDlg*)(CDialog*)GetParent())->m_nValue=m_nValue;
    ////////注意这里要强制转换两次!!!//1:还可以利用这个方法直接给CFatherDlg中的控件赋值
    //((CFatherDlg*)(CDialog*)GetParent())->SetDlgItemInt(IDC_EDIT_VALUE,m_nValue);
    //2:直接从父对话框中获得变量,传到子对话框
    //((CFatherDlg*)(CDialog*)GetParent())->GetDlgItem(IDC_EDIT_VALUE)->GetWindowText(m_strValue);m_strValue是CSonDlg的成员变量;可以直接看到变化;
    //m_nYear=((CFatherDlg*)(CDialog*)GetParent())->m_nValue}
      

  4.   

    两种方法:
    1、模态对话框——用DoModal显示第二个对话框,那么要在第二个对话框的OnInitDialog里边进行数据更新(lixiaosan(小三) 的例子)
    2、非模态对话框——用Create和ShowWindow显示第二个对话框,在Create之后,就能用楼主的办法了:
    类似
    CWnd* pWnd1 = GetDlgItem(IDC_EDIT_YH);
    pWnd1->GetWindowText(str);
    CWnd* pWnd2 = GetDlgItem(IDC_EDIT_YH2);
    pWnd2->SetWindowText(str);
    就能设置了,只不过要注意是否获得了正确的对象