2014-01-16 4 views
1

하나의 주 대화 상자가있는 MFC 응용 프로그램을 만들고 다른 모든 대화 상자는이 주 대화 상자의 하위 항목입니다.MFC 하나의 부모 대화 상자, 여러 자식 대화 상자

이제 기본 대화 상자에 첫 번째 자식을 삽입 할 수 있었지만 다음 대화 상자 (열린 대화 상자의 순서는 무작위 임)에 전달하고자하므로 첫 번째 대화 상자를 숨기고 표시해야합니다. 다른. 현재 어떤 대화 상자가 표시되는지 알기 위해 CDialog 변수를 사용하여 현재 열린 대화 상자를 저장하려고했지만 CObject::operator =' : cannot access private member declared in class 'CObject' 오류가 발생합니다.

"대화 표시 및 숨기기"게임을 수행하는 다른 방법이 있습니까?

편집 : 대화 상자의 일부 ID를 저장하고이 작업을 수행하는 데 사용할 수 있습니까?

+0

CDialog를 서브 클래 싱 했습니까? 거의 들리지 않는 것처럼 들리네 –

+0

아니요, 아니요 ... – MRM

+0

기본 대화 상자에서 다음과 같이 벡터를 추가해야합니다. std :: vector > 추적 할 수 있습니다. 하나의 대화 상자에서 다른 대화 상자로 이동할 때마다 벡터를 통해 표시/숨기기 –

답변

0

그래서 IDD 클래스를 사용하여이 작업을 수행했습니다.

첫째, 내가 마지막

m_dlgStartPage.Create(CStartPageDlg::IDD, this); 
m_openedWin.nDialogIDD = m_dlgStartPage.IDD; 
m_dlgStartPage.ShowWindow(SW_SHOW); 

그런 대화의 IDD를 열 저장 새로운 대화 상자가 표시 될 필요가있을 때, 나는 (nIDD 대화를 보류중인 쇼의 IDD입니다) 내 주 대화 상자에 메시지를 보내 :

AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND_CHANGE_WINDOW, nIDD, 0);

그리고 마지막으로, 내 주요 대화 상자에서, 내가 모든 하위 대화 상자를 구문 분석하고 각 대화의 IDD와 경우 m_openedWin.nDialogIDD 일치를 확인, 그래서 그것을 숨길 수 있습니다. 이 후, 다시 모든 chid 대화 상자를 구문 분석하고 정확한 메시지를 표시하기 위해 보낸 메시지의 nIDD을 사용하십시오.

모든 구문 분석 및 기본 대화 상자의 클래스로 보낸 메시지 때문에이 방법이 마음에 들지 않으므로 누구나 더 좋은 아이디어 나 방법이 있으면 게시하십시오.

관련 문제