출처:http://www.howspace.kr/gbs/bbs/tb.php/gr2_10_data/176
먼저 자식 Dialog의 cpp파일에 부모 클래스의 헤더파일을 include 해줍니다.
#include "ParentDlg.h"
!아..저 같은 경우는 바보같은 실수를 해서 헤더파일에 부모 헤더를 include했었습니다..
그럼 오류 날수 있으니 주의해주세요...(부모에서 자식 Dialog 헤더를 include하면 중복이 되며 구문 에러가 납니다..
당연한 이유입니다.. 한번 헤더를 인쿨루드 하고 다시 상대헤더에서 또 헤더를 인클루드 하고...-_-;)
그다음 함수든 변수든 실행해주면 땡입니다
변수의 경우는
((CParentDlg *)GetParent())->m_flag = TRUE;
함수의 경우는
((CParentDlg *)GetParent())->TempFunction(filename); //TempFunction이란 함수에 filename 파라메터를 넣어 호출한것입니다.
1. 대화상자가 뜨기 전에 값을 넘겨줘야합니다..
즉,
CTestDlg mDlg;
mDlg.DoModal();
이렇게 하면 그냥 대화상자가 떠버리는데..
CTestDlg mDlg;
mDlg.m_iValue = 5;
mDlg.m_lValue = 481231273;
mDlg.m_strValue = "Test";
mDlg.DoModal();
이런 방식으로 대화상자 클래스 멤버 변수에 값을 세팅한 후
대화상자를 띠우면 됩니다..
2. 받는 것도 마찬가지죠..
OK 버튼을 눌렀을때..
void CTestDlg::OnOK()
{
m_iValue = 15;
m_lValue = 4231273;
m_strValue = "Test End";
CDialog::OnOK();
}
이렇게 값을 주고..
대화상자 띠운 곳에서 받으면 됩니다..
if( IDOK == mDlg.DoModal() ){
i = mDlg.m_iValue;
l = mDlg.m_lValue;
str = mDlg.m_strValue;
}
이렇게..
| | 빈터 | 09-10-28 17:08 |  | 우선, 어떻게 프로그래밍을 하려구 하는지...
만약, 메인창과 모달창 간의 값전달이 - 메인창 -> 모달창 값 전달 : 모달창 뜰때만 전달 - 모달창 -> 메인창 값 전달 : 모달창이 종료될때만 전달 와 같다면 앞선 답변처럼 하면 될 것 같습니다. 그렇지 않고 수시로 전달되길 원한다면, 아래와 같은 방법은 어떨런지....
메인창 : CMainDlg 모달창 : CModalDlg
1. CMainDlg의 멤버변수로 CModalDlg를 가지고 있음 CModalDlg에 함수 추가하여 호출(예를 들면, void ProcessMsg(CString strMsg))
2. CModalDlg의 멤버변수에 CMainDlg의 포인터를 가지고 있음
(솔직히 저는 이런 방식보다는 CMainDlg의 핸들에 메시지를 보내는 방식을 사용하지만, 그건 설명이 조금 복잡한 것 같아서...)
CMainDlg에 함수 추가하여 호출
이해되시나요?
이때 주의할 점은 CMainDlg 헤더 파일과 CModalDlg 헤더파일에서 상호 참조하지 않게 해주어야 하거든요.
코드 예
// CMainDlg 헤더 파일 시작
...
#include "ModalDlg.h"
CModalDlg m_ChildDlg; // CModalDlg 헤더파일 포함
void ProcessMsg(CString strMsg); ...
// CMainDlg 헤더 파일 끝
// CModalDlg 헤더 파일 시작
... class CMainDlg;
CMainDlg *m_pParentDlg;
void ProcessMsg(CString strMsg);
// CModalDlg 헤더 파일 끝
// CMainDlg 소스 파일 시작
m_ChildDlg.m_pParentDlg = this;
m_ChildDlg.DoModal();
// CModalDlg에 메시지 보내기
m_ChildDlg.ProcessMsg("test");
// CModalDlg에서 온 메시지 처리
void ProcessMsg(CString strMsg)
{
// 처리 코드
}
// CMainDlg 소스 파일 끝
// CModalDlg 소스 파일 시작
#include "MainDlg.h" // CMainDlg 헤더파일 포함
// CMainDlg에 메시지 보내기
if (m_pParentDlg) // m_pParentDlg 초기화 해줘야 해요...포인터이기에...
{
m_pParentDlg->ProcessMsg("test");
}
// CMainDlg에서 온 메시지 처리
void ProcessMsg(CString strMsg)
{
// 처리 코드
}
// CModalDlg 소스 파일 끝
|
|