2009-08-04 3 views
8

두 가지 다른 방법 (편집 모드 및 프로그래밍 모드)에서 사용할 수있는 대화 상자 (CDialog 파생 클래스)가 있습니다.런타임시 모덜리스 대화 상자를 모달로 변환

대화 상자가 프로그래밍 모드에서 사용되도록 열려 있으면 기본보기 (도구 모음 종류)를 수정하는 데 사용되는 모덜리스 대화 상자입니다. 에디션 모드에서 열 때 사용자는 대화 상자 자체의 구성을 변경할 수 있으며이 경우 모달 대화 상자입니다.

지금은 두 가지 다른 대화 상자로 약간의 차이점이 있습니다. 대화 상자에서 단추를 눌러 프로그래밍 모드와 에디션 모드간에 사용자가 대화 할 수있게하고 싶습니다.

그래서 모달 대화 상자에서 모덜리스 대화 상자를 변환해야하며 그 반대의 경우도 런타임에 변환해야합니다. 그 방법을 얻을 수 있습니까?

감사합니다.

답변

11

으로 어쩌면 누군가가 미래에 유사한 일을에 관심이있을 수 있습니다, 이것은 내가 결국 그것을 한 방법입니다.

이 기능의 문제점은 상위 창을 사용하지 않는 것과 같습니다. 모달을 만들려는 창도 비활성화됩니다. 그러나 해결 방법은 간단합니다. BeginModalState을 호출 한 후 창을 다시 활성화하십시오.

void CMyDialog::MakeModal() 
{ 
    //disable all main window descendants 
    AfxGetMainWnd()->BeginModalState(); 

    //re-enable this window 
    EnableWindow(TRUE); 
} 

void CMyDialog::MakeModeless() 
{ 
    //enable all main window descendants 
    AfxGetMainWnd()->EndModalState(); 
} 

도움 주셔서 감사합니다.

2

은 대화 상자를 닫았다가 다시 열지 않고도 수행 할 수 없습니다. 그런 다음 ShowWindow 또는 DoModal을 적절하게 호출 할 수 있습니다.

1

정확하지 않습니다. MFC 소스를 보면 모달 대화 상자가 기술적으로 모달이 아님을 알 수 있습니다. 이 작업을 제대로 수행하려면 많은 작업을해야하지만 기본적으로 '모달'창의 부모를 사용 중지하고 '모달'창이 닫힐 때 다시 사용하도록 설정해야합니다.

나는 개인적으로이 작업을 수행 했으므로이 작업이 사용자에게 도움이 될 수 있습니다. 그러나 사용자가 무엇을 하려는지 정확히 알지 못합니다. CMainFrame::BeginModalState()CMainFrame::EndModalState() :

내가 메인 프레임의 두 가지 기능을 사용

+0

부모를 사용 중지/사용 설정하면 어떤 의미입니까? 이미 GetParent() -> EnableWindow (FALSE)/GetParent() -> EnableWindow (TRUE)를 호출하려했으나 내 대화 상자도 사용할 수 없기 때문에이 기능이 작동하지 않았습니다. 부모 창은 관련이 있는지 모르는 주 프레임입니다. BTW : 모덜리스 대화 상자 (Create/ShowWindow)를 열면 사용자가 단추를 누르면 대화 상자가 모달이됩니다. 사용자가 버튼을 다시 누르면 대화 상자가 다시 모드로 전환됩니다. –

관련 문제