基于对话框的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对话框中
单击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对话框中
相关文章推荐
- mfc对话框窗口之间变量的传递
- MFC中实现父对话框与子对话框之间的参数传递,实例可测
- 关于MFC中 父窗口与子窗口 子窗口与子窗口之间的信息传递及控制
- MFC窗口之间的消息传递
- 隐藏基于对话框的MFC应用程序窗口的方法 (推荐这个方法,非常好用)
- 【MFC-10】VS2010/MFC基于对话框程序的登录窗口实现
- .隐藏基于对话框的MFC应用程序窗口的方法
- 《新手入门》 MFC基于对话框的窗口分割
- 如何在MFC对话框之间自定义消息传递
- MFC中两个对话框之间数据传递
- 屏蔽基于对话框的MFC程序中按下ESC关闭窗口的功能
- MFC基于对话框 创建工具栏 工具栏提示 窗口同步缩放 拦截主界面Enter按下 窗口过程 菜单工具栏按钮变灰
- MFC中两个对话框之间数据传递
- MFC对话框之间传递数据
- MFC不同窗口之间传递数据
- MFC对话框之间自定义消息传递
- MFC不同窗口之间传递数据
- MFC中获取各个窗口(对话框)之间的指针、对象、句柄
- 如何在MFC对话框之间自定义消息传递
- MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口