2011-11-09 2 views
2

mfc와 내 메인보기에 대화 상자가 있습니다. 뷰는 두 개의 int 값을 취하는 새로운 대화 상자를 시작하고 이러한 값을 내 뷰로 반환하려고합니다. 보기에서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); 

} 

이제 어떻게 액세스 할 수있는 논문 값 : 내가있는 DoDataExchange으로 뭔가를해야하고 여기 내 대화 상자에서 코드를 알아?

당신이 리소스 ID IDC_MY_EDITBOX와 편집 상자를 가정하고 당신이 CString을 객체에 바인딩 할 :

답변

5

당신이 MFC에서 데이터 뷰를 동기화하는 방법은 다음과 같이한다. CString에 대한 변경 사항은 편집 상자에 반영되어야하며 문자열 객체에 대한 변경 사항은 UI를 업데이트해야합니다. 이 예는 호출 할 수 있습니다 위해이 변수 및 뷰 사이의 바인딩 두 방법을 설립했다

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

처럼 CString을가 (멤버 변수 mEditBoxString 객체 편집 상자)

코드에서 mEditBoxString을 변경하고 UI에 반영하려고합니다. 어떻게 든 DoDataExchange를 호출해야합니다. 귀하는 귀하의 경우에 기본 클래스 방법이 될 CWnd::UpdateData으로 전화하여 수행합니다.

FALSE을 UpdateData에 전달하면 UI가 mEditBoxString을 사용하여 변경 한 사항으로 업데이트된다는 것을 의미합니다.

TRUE을 UpdateData에 전달하면 UI에서 mEditBoxString 변수가 업데이트된다는 것을 의미합니다. 사용자가 실제로

을 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

관련 문제