포인터 캐스팅을 이용하여 자식창에서 부모창의 포인터 주소를 얻어 처리합니다.

자식창에 입력 버튼을 만들고 아래와 같이 코딩합니다.
void CNewDialog::OnBnClickedInput()
{
 // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
 CString m_strTemp;
 CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
 pEdit->GetWindowText(m_strTemp);
 TRACE(L"%s \n", m_strTemp);

 CModalDlg *pMainWnd = (CModalDlg *)AfxGetMainWnd();
 pMainWnd->m_str2 = m_strTemp;
 pMainWnd->ShowValue();

}

부모창에는 m_str2 전역변수를 만들고 아래와 같이 추가합니다.
void CModalDlg::ShowValue(void)
{
 CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
 pEdit->SetWindowTextW(m_str2);
}

위는 동강으로 배운 내용이고 응용하자면...
// 부모창에는
void CNewDialog::OnBnClickedInput()
{
 // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
 CString m_strTemp;
 CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
 pEdit->GetWindowText(m_strTemp);
 TRACE(L"%s \n", m_strTemp);

 CModalDlg *pMainWnd = (CModalDlg *)AfxGetMainWnd();
 //pMainWnd->m_str2 = m_strTemp;
 pMainWnd->ShowValue2(m_strTemp);

}

// 자식창에는
void CModalDlg::ShowValue2(CString m_str)
{
 CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
 pEdit->SetWindowTextW(m_str);
}


이렇게 하는것이 효과적이지 않을까?  굳이 전역변수를 만들 필요까지는 없을듯...
물론 문제는 있다.
예를들어 어떠한 옵션창을 오픈하여 여러 옵션을 선택한뒤 사용자가 저장 버튼을 눌렀다고 가정한다면
그건 부모창에서 처리하는 옵션데이터 struct 변수에 저장해야 하지 않을까?

Posted by +깡통+