在VC 6.0中有一个对话框工程在其界面有一个图形框,我在这个对话框中又引进包含了另一个对话框,程序运行时调用显示这个子对话框。然后子对话框的文本编辑控件中输入文字时想实时显示在父对话框的图形控件中。也就是两个对话框在同一个界面显示,一个对话框类使用另一个对话框中的数据,但是要实时显示,子对话框输入时同步显示在父对话框中这在一个对话框好做,在两个对话框中没有做出来,不知如何样去做。谢谢!

解决方案 »

  1.   


    void CEditDlg::OnChangeEdit1() 
    {
    UpdateData(true);
    m_edit2=m_edit1;
    UpdateData(false);
    }
      

  2.   

    这样不行啊。是父对话框实时显示子对话框中数据。不是在一个对话框中显示呀。也就是 m_edit1 void CEditDlg::OnChangeEdit1() 发生在父对话框,m_edit2是子对对话框中的控件。谢谢。有没有其它办法呀。
      

  3.   

    zaodt 那么就在子对话框中记录主对话框的指针; 在输入数据的同时,向主对话框发送相应的消息即可。这名话能不能详细些呀能不能具体写下代码呀,尤其发送相应消息这句话。谢谢。
      

  4.   

    一种比较笨的方法就是在住对话框中创建一个定时器OnTimer在其中不停UpdateDate();
    在子对话框中将要实时输入同时给主对话框就可以了
      

  5.   

    HellowKitty  有没有这方面的例子,或者你能不能稍稍具体一点,我现在  zaodt 的提示下向这个方面努力,用sendmessage 或者其它如何在子对话框中写,另外主对话框中如何接受这个消息,取出这个信息内容。特别感谢!
      

  6.   

    找个现成的程序看看最简单。或者搜索ON_MESSAGE 之类的看看
      

  7.   

    1.自定义一个消息
    #define WM_EditChanged WM_USER+1002.子对话框中有输入,记录Edit中的字符串,发消息给父窗口
    void CDlg1::OnChangeEdit1() 
    {
    // TODO: If this is a RICHEDIT control, the control will not
    // send this notification unless you override the CDialog::OnInitDialog()
    // function and call CRichEditCtrl().SetEventMask()
    // with the ENM_CHANGE flag ORed into the mask.

    // TODO: Add your control notification handler code here
    m_Edit.GetWindowText(m_strEdit);
    ::PostMessage(GetParent()->m_hWnd,WM_EditChanged,NULL,NULL);
    }3.父窗口中定义消息响应函数
      头文件: // Generated message map functions
    //{{AFX_MSG(CEditDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnButton1();
    //}}AFX_MSG
    afx_msg LRESULT OnEditChanged(LPARAM lParam,WPARAM wParam);
    DECLARE_MESSAGE_MAP()
     cpp文件 
     BEGIN_MESSAGE_MAP(CEditDlg, CDialog)
    //{{AFX_MSG_MAP(CEditDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_EditChanged,OnEditChanged)
    END_MESSAGE_MAP()LRESULT CEditDlg::OnEditChanged(LPARAM lParam,WPARAM wParam)
    {
    m_Edit.SetWindowText(dlg.m_strEdit);
    return 0;
    }
    OK了!简单吧!
      

  8.   

    你自定义WM_XXX
    在子对话框OnEditChanged()函数里添加
    GetParent()->SendMessage(WM_XXX, (WPARAM)lpstrEdit);// lpstrEdit为修改后的编辑框字符串指针在父窗体中添加对WM_XXX的消息响应函数,或者可以重载PreTranslateMessage()
    {
        if (pMsg->wParam == WM_XXX)
    {
    LPTSTR pStr = pMsg->wParam;
                    将pStr显示到副窗体控件中即可
    }
    }
      

  9.   

    luckyboy1979 我在照你说的做,还没有出来,没有任何错误,就是出不来,我正在找问题 ,谢谢你啊。我的QQ 邮箱 409372034 @ qq.com
      

  10.   

    问题解决了,特别感谢各位。尤其  uckyboy1979   HellowKitty  zaodt 对我的指导。
    我做个总结,问题完全按 uckyboy1979 的所例代码书写。可能我描述上有些差异,在获取父窗口指针哪儿出了点问题,但还是解决了,感谢 uckyboy1979 没有你的代码,我解决不了,解决了就简单了,没有解决前,真是没有想到用 SendMessage 方法啊。  void CDlg1::OnChangeEdit1() 

          CWnd*   pWnd = CWnd::FindWindow(NULL, _T("窗口名称"));
         HWND   hwnd = pWnd -> GetSafeHwnd();
        ::SendMessage(hwnd,WM_EditChanged,NULL,NULL);
    }FindWindow 第一个参数可以是 类名,第个参数可以是 NULL 但这样一改就出不来了,i不知原因,
    可能还有其它好的办法,再次 感谢!
      

  11.   

    1.取父窗口文本框句柄hPwnd
    2.给子窗口重载一个构建函数,用这个函数传入hPwnd.ChildDLG::ChildDLG(HWND hwnd)
    {
         m_hPeditwnd=hwnd;
    }3.void ChildDLG::OnChangeEdit1() 
    {
        UpdateData(true);
        ::SetWindowText(m_hPeditwnd,m_strChild);
        UpdateData(false);
    }