您的位置:首页 > 其它

基于对话框的MFC窗口之间值的传递

2017-05-06 20:56 661 查看
编码时碰到一个MFC多个对话框窗口之间值的传递的问题,花了些时间总结一下。问题具体是这样的:

单击CWorkerBorrow对话框类中的“添加借调“功能按钮,弹出CMBorrow对话框来编辑信息,然后鼠标点击CEdit类型的编辑框区域,在CMBorrow对话框上弹出CSelectWorker对话框,通过查询后选中CSelectWorker中列表控件中的某项,然后单击确定按钮将选中的值传给CMBorrow对话框中的编辑框。

简而言之:

在A中点击按钮弹出B,在B中点击CEdit编辑框弹出C,在C中选某(些)值,将值传给B的某(些)编辑框;

解决步骤:

1、响应“添加借调”按钮,弹出CMBorrow对话框

2、在CMBorrow对话框中响应PreTranslateMessage消息,实现点击CEdit编辑框弹出CSelectWorker对话框

BOOL CMBorrow::PreTranslateMessage(MSG* pMsg)

{
// TODO:  在此添加专用代码和/或调用基类

if (pMsg->message == WM_LBUTTONDOWN)
{
CRect rc;
GetDlgItem(IDC_MWID)->GetWindowRect(&rc);// 获取编辑框矩形区域

if (rc.PtInRect(pMsg->pt))
// 如果鼠标坐标在编辑框区域中则弹出
{
CSelectWorker dlg;
dlg.DoModal();
// 弹出CSelectWorker对话框

m_mwid = dlg.m_wid;
// m_mwid、m_odid、m_oPosition为CEdit的值变量
m_odid = dlg.m_dp2;
// m_wid、m_dp2、m_position为CSelectWorker的成员变量
m_oPosition = dlg.m_position;

m_cwid.SetWindowTextW(m_mwid);
// m_cwid、m_codid、 m_cposition为CEdit的控制变量
m_codid.SetWindowTextW(m_odid);
m_cposition.SetWindowTextW(m_oPosition);

return TRUE;

}
}

return CDialogEx::PreTranslateMessage(pMsg);

}

3、处理CSelectWorker对话框中确定按钮点击事件

void CSelectWorker::OnBnClickedOk()

{
// TODO:  在此添加控件通知处理程序代码

m_wid = m_list.GetItemText(m_listIndex, 0);
// 将选中的值赋值给成员变量,m_list为CListCtrl的控制变量
m_dp2 = m_list.GetItemText(m_listIndex, 3);
// m_listIndex为列表控件的列号
m_position = m_list.GetItemText(m_listIndex, 4);

CDialogEx::OnOK();

}

这样便成功地将值传给了CMBorrow对话框中的编辑框,关键在CMBorrow中响应PreTranslateMessage消息,通过点击编辑框弹出对话框(CSelectWorker),然后将值赋值给CSelectWorker的成员变量,关闭CSelectWorker对话框后再给CMBorrow编辑框的值赋值,最后用编辑框的控制变量设置编辑框中的值。

附图:

点击“添加借调”弹出CMBorrow对话框



点击“员工编号”编辑框,弹出CSelectWorker对话框,选择list列表中的某行并获取值,然后将值赋值给CSelectWorker的成员变量 m_wid,m_dp2,m_position,然后点击确定按钮



最后值成功传到CMBorrow对话框中

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息