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

编码时碰到一个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对话框

基于对话框的MFC窗口之间值的传递_第1张图片


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

基于对话框的MFC窗口之间值的传递_第2张图片


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

基于对话框的MFC窗口之间值的传递_第3张图片

你可能感兴趣的:(MFC)