MFC中edit控件中同一程序中对话框间的传值与显示方法

来源:互联网 发布:服装商品数据分析报表 编辑:程序博客网 时间:2024/05/04 04:01

我用实例来说,首先在VC6.0中建立一个基于对话框的项目。然后在这个作为接受显示的对话框窗口中设置两个一个Edit控件,把这个拥有Edit控件的对话框取名为EditDlg,然后在用PreTranslateMessage函数设置点击这个Edit控件的单击事件,这个事件响应打开另一个对话框SendToEdlg,在这个对话框中有一个Button控件,单击这个控件,对话框SendToEdlg关闭,EditDlg对话框中的Edit控件显示这个Button按钮上的信息。以下用代码来说明:

BOOL EditDlg::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->hwnd == m_edit1.m_hWnd && pMsg->message == WM_LBUTTONDOWN)
{
UpdateData();
SendToEdlg dlg;
pDlg = &dlg; //pDlg是在EditDlg类里定义的SendToEdlg 指针
    dlg.DoModal();//打开对话框SendToEdlg 
m_edit1str = pDlg->m_str1c;//
m_edit1.SetWindowText(m_edit1str);
return TRUE; //这个返回,好像把控件消息屏蔽了,所以我只能在这返回之前处理消息响应, //
但是没有,返回就不正确

}
return CDialog::PreTranslateMessage(pMsg);
}

m_edit1是EditDlg对话框中的Edit控件的CEdit类型变量,用它可直接关联到Edit控件从而操作函数。

m_edit1str 是Edit控件的CString变量。

这个是SendToEdlg对话框Button按钮的事件处理代码

voidSendToEdlg::OnButton1() 
{
// TODO: Add your control notification handler code here
//pDlg->m_edit1str = m_str1c;//此方法是用全局指针实现


m_str1c = _T("1C");
CDialog::OnOK();

}

这样就实现了数据传递和对话框的数据显示,最主要的的是在PreTranslateMessage函数里拦截消息并实现消息的处理,简单方便。但是这种方法的缺点也是蛮大的,处理一两条消息还可以,大量的消息不行 


EditDlg对话框

点击那个Edit控件出来的SendToEdlg对话框



点击那个1C按钮后SendToEdlg对话框关闭,EditDlg对话框edit控件显示1C,



0 0