1. 程式人生 > >基於對話方塊的MFC視窗之間值的傳遞

基於對話方塊的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對話方塊


點選“員工編號”編輯框,彈出CSelectWorker對話方塊,選擇list列表中的某行並獲取值,然後將值賦值給CSelectWorker的成員變數 m_wid,m_dp2,m_position,然後點選確定按鈕


最後值成功傳到CMBorrow對話方塊中