2011-11-09 75 views
2

我在mfc和我的主視圖中有一個對話框。視圖開始一個新的對話框,它接受兩個int值,我想將這些值返回到我的視圖。我知道我必須做一些事情的DoDataExchange,這裏是從我的對話框代碼:如何在兩個對話框之間傳遞數據mfc

void MapCreator::DoDataExchange(CDataExchange* pDX){  

    CDialogEx::DoDataExchange(pDX); 

    CString stringColumn; 
    CString stringRow; 

    CWnd* dialog = GetDlgItem(columns); 
    dialog->GetWindowText(stringColumn); 

    dialog = GetDlgItem(rows); 
    dialog->GetWindowText(stringRow); 

    int numColumn = _wtoi(stringColumn); 
    int numRow = _wtoi(stringRow); 

    DDX_Text(pDX, columns, numColumn); 
    DDV_MinMaxInt(pDX, numColumn, 1, 50); 
    DDX_Text(pDX, rows, numRow); 
    DDV_MinMaxInt(pDX, numRow, 1, 50); 

} 

現在,我怎麼能訪問視圖論文值?

回答

5

你在MFC同步數據和觀點的方式是這樣的:

假設你有資源ID IDC_MY_EDITBOX一個編輯框,並希望將其綁定到一個CString對象。對CString的更改應該反映在編輯框中,對字符串對象的更改應該更新您的UI。在這個例子中可以打電話給你的CString對象的成員變量 mEditBoxString

class MapCreator : public CDialog 
{ 
//Everything else omitted for brevity 
CString mEditBoxString; 
}; 

你的DoDataExchange應該是這個樣子

void MapCreator ::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialog::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_MY_EDITBOX, mEditBoxString); 
} 

這已經建立了雙向變量和視圖之間的結合(編輯框

如果更改代碼中的mEditBoxString並希望它反映在UI中。不知何故,DoDataExchange需要被調用。你可以通過調用CWnd::UpdateData來做到這一點,在你的情況下這將是一個基類方法。

如果您將FALSE更新爲UpdateData,則表示UI將隨您對mEditBoxString所做的任何更改而更新。

如果您將TRUE傳遞給UpdateData,則表示mEditBoxString變量將從UI更新。因此,如果用戶確實已經編輯了新的價值將被存儲在箱mEditBoxString

比方說,你也有一個按鈕(比如LOAD)在對話框中被連接到這個功能

void CMapCreatorDlg::OnLoadClicked() 
{ 
    //Do you heavy loading stuff here 
    mEditBoxString = "Load Complete"; 
    UpdateData(FALSE); 
} 

之後,您的對話框將在編輯框中顯示加載完成

+0

好吧,所以基本上我必須調用更新視圖中的數據?你也可以給我看一個在視圖中訪問editboxstring的例子嗎? – vman

+0

你不必擔心查看。您更新** mEditBoxString **並執行** UpdateData(FALSE)**並且視圖自行處理 –

+0

基本上,對話框會詢問行數和列數。那些行和列正在使用視圖來生成矩形網格。我設置了代碼,我只需要從另一個對話框中獲取行和列值。我如何在視圖中使用mEditBoxString? – vman

相關問題