2010-07-21 2 views
2

나는 당신이 어디에 전에 MFC 대화 상자를 사용했습니다 : DoModal 후에 MFC 대화 상자가 숨겨지면 컨트롤이 파괴됩니까?

EnterNameDlg dlg; 
dlg.DoModal(); 
string str = dlg.GetName(); 

그러나 지금이 대화 상자가 실제로 이러한 방법의 목록 상자 컨트롤 살펴보고 제대로 동작하지 않습니다. DoModal() 후에 클래스 인스턴스가 명확하게 존재하지만 실제 대화 상자가 파괴됩니까? 두 번째로 DoModal()이라고 부르는 것이 OnInitDialog()이 다시 호출되어이 이론을 뒷받침하는 것처럼 보인다고해서 대화 상자가 단순히 두 번째로 시각적으로 표시되기보다는 템플릿에서 다시 만들어졌습니다.

답변

3

예, DoModal은 각 호출마다 대화 상자를 생성하고 반환하기 전에 창을 파괴합니다.

데이터 회원 만 유효합니다. 물론 대화 상자의 수명 동안 데이터를 수집하려는 경우 EnterNameDlg 클래스에 데이터 멤버를 더 추가 할 수 있습니다.
dlg가 범위를 벗어나면 모든 것이 할당 해제됩니다.

2

DoModal 클래스 인스턴스가 계속 존재하지만 창과 모든 컨트롤이 삭제되었습니다. DoModal 후에 대화 상자 컨트롤과 작동하지 않는 기능 만 호출 할 수 있습니다. 대화 상자 클래스 내부에서 OK 단추를 누르면 CString과 같은 클래스 멤버에 필요한 값을 유지하십시오. 이러한 멤버는 대화 상자가 닫힌 후에 읽을 수 있습니다.

1

MFC 전체는 어색한 쌍 (윈도우와 연결된 핸들 및 MFC 클래스 개체)을 중심으로 구성됩니다. MFC 클래스는, 대부분의 경우, 윈도우보다 오래 사용하도록 (듯이) 설계되고 있습니다.

관련 문제