2013-05-16 6 views
0

OnFileNew() 함수 (theApp 개체에서 처리됨)를 호출 할 때 대화 상자가 호출되는 MDI 응용 프로그램이 있습니다. 이 대화 상자에서는 사용자가 ->CreateNewChild() 함수가 호출 될 때 생성되는 CChildFrame 개체로 전달되어야하는 변수에 값을 설정할 수 있습니다.작성시 C++ MFC MDI 자식 창 변수 변경

->CreateNewChild() 함수로 생성 된 CChildFrame 개체에 어떻게 이러한 변수를 전달합니까?

편집 : 내가 얻은 대답에 대한 응답으로 ->Create()->CreateNewChild()을 사용한 결과가 있습니다.

링크 : CMainFrame *pFrame; - pFrame->CreateNewChild()

링크 : CChildFrame *childFrame; - childFrame->Create()

가 어떻게 두 번째 링크에 설명 된 함수 선언과 함께 첫 번째 링크에 표시된 탭 창을받을 수 있나요?

+0

그리고 질문은 어디에 있습니까? –

+0

질문을 원래 게시물에 넣는 것을 잊었습니다. 그 점을 지적 해 주셔서 감사합니다. 게시물을 편집하여 질문을 포함 시켰습니다. –

답변

1

사용자 지정된 문서 템플리트를 통해 데이터를 전달할 수 있습니다. 추가 데이터 멤버를 추가하려면 CMultiDocTemplate에서 클래스를 파생시킨 다음 파생 된 문서 템플릿 클래스에 대한 포인터를 CWinApp 파생 응용 프로그램 클래스에 추가합니다. 완료 할 때를 제외하고는 일반적인 방법으로 문서 템플릿을 초기화하고 새 문서 템플릿 개체를 앱 클래스의 포인터에 저장하십시오.

이제 CreateNewChild 함수에서 CWinApp :: OnFileNew를 호출하는 대신 OpenDocumentFile (NULL)을 호출하기 전에 현재 프레임에서 데이터를 가져 와서 app 클래스에 저장된 문서 템플릿의 데이터 멤버에 할당 할 수 있습니다). OpenDocumentFile이 반환 될 때 데이터 멤버를 지울 수 있습니다.

문서 템플릿은 차례대로 자식 프레임을 만들고 문서 템플릿을 작성 컨텍스트로 전달합니다. 자식 프레임에서 생성 컨텍스트를 얻으려면, 당신은 CChildFrame :: OnCreateClient를 오버라이드 (override), 또는 한 OnCreate에서 생성 구조를 읽을 수 있습니다 : 문서 템플릿에 초기화 데이터를 전달하는

MDICREATESTRUCT * pMDICreateStruct=(MDICREATESTRUCT *)lpCreateStruct->lpCreateParams; 
CCreateContext *pCreateContext=(CCreateContext *)pMDICreateStruct->lParam; 

를 대신하여 데이터를 전달할 수 새 문서로 기본적으로 CMultiDocTemplate :: OpenDocumentFile에서 코드를 복사하고 코드를 추가하여 기본 프레임의 활성 문서에서 초기화 데이터를 가져옵니다.

+0

프로젝트에 문서/아키텍처 지원이 없을 때이 작업을 수행 할 수있는 방법이 있습니까? –

+0

ID_FILE_NEW 명령 처리기에서 수집 한 초기 데이터가 들어있는 CCreateContext에서 파생 된 클래스를 자식 프레임의 작성 함수에 전달하고 Create Context를 사용하여 OnCreate에서 하위 프레임을 채울 수 있습니다. –