2011-11-09 42 views
2

私はmfcと私のメインビューでダイアログを持っています。ビューは2つのint値を取る新しいダイアログを開始し、これらの値を私のビューに戻したい。今、私はビューの論文値にアクセスする方法をmfcの2つのダイアログ間でデータを渡す方法

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); 

} 

:私はdodataexchangeで何かをする必要があり、ここで私のダイアログからのコードです知っていますか?

答えて

5

あなたはMFCで、データとビューを同期する方法は、このようなものです:

あなたはリソースID IDC_MY_EDITBOXとエディットボックスを持っていて、CStringオブジェクトにバインドするとします。 CStringの変更はエディットボックスに反映され、文字列オブジェクトの変更はUIを更新するはずです。この例ではあなたのDoDataExchangeこれは(を変数とビュー間の結合2つの道を確立してい

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

ようになるはずです

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

をmEditBoxStringメンバ変数 オブジェクトあなたのCStringを呼び出すことができます編集ボックス

コードでmEditBoxStringを変更し、それをUIに反映させたい場合。何とかDoDataExchangeを呼び出す必要があります。あなたはCWnd::UpdateDataを呼び出して、あなたの場合は基本クラスのメソッドになります。

FALSEをUpdateDataに渡すと、mEditBoxStringで行った変更でUIが更新されます。

TRUEをUpdateDataに渡すと、UIからmEditBoxString変数が更新されます。ユーザーが実際にボックスを編集したのであれば、新しい値が

をmEditBoxStringするとあなたも

void CMapCreatorDlg::OnLoadClicked() 
{ 
    //Do you heavy loading stuff here 
    mEditBoxString = "Load Complete"; 
    UpdateData(FALSE); 
} 
この関数に配線されているあなたのダイアログのボタン(たとえば LOAD)を考えてみましょう に保存されます

その後、の編集ボックスにロード完了が表示されます。

+0

基本的に私はビューで更新データを呼び出す必要がありますか?また、ビュー内のeditboxstringにアクセスする例を表示できますか? – vman

+0

あなたは心配する必要はありません。 ** mEditBoxString **を更新し、** UpdateData(FALSE)**を実行し、ビューが自動的に処理されます –

+0

基本的に、ダイアログボックスは行数と列数を求めます。これらの行と列は、ビューを使用して長方形のグリッドを生成しています。コードを設定して、他のダイアログから行と列の値を取得するだけです。ビューでmEditBoxStringを使用するにはどうすればよいですか? – vman

関連する問題