Zet een modaal dialoogvenster op modal tijdens runtime

stemmen
8

Ik heb een dialoogvenster (CDialog afgeleide klasse) die gebruikt kunnen worden op twee verschillende manieren (editie mode en programmering modus).

Wanneer het venster wordt geopend voor gebruik in programmeermodus is een modaal dialoogvenster dat wordt gebruikt voor het modificeren van de hoofdweergave (soort toolbar). Openings in bewerkingsmodus kan de gebruiker de configuratie van het venster zelf; in dit geval een modaal dialoogvenster.

Op dit moment zijn ze twee verschillende dialogen met weinig verschillen en ik zou willen hebben gewoon willen dialoog en laat de gebruiker verandering tussen programmering en bewerken van tekst met een druk op een knop in het dialoogvenster.

Dus ik moet de modaal dialoogvenster te zetten in een modaal dialoogvenster en vice versa tijdens de uitvoering. Is er een manier om achive dat?

Bedankt.

De vraag is gesteld op 04/08/2009 om 07:24
bron van user
In andere talen...                            


3 antwoorden

stemmen
2

Dat kan niet worden gedaan gemakkelijk zonder het sluiten en opnieuw openen van de dialoog. Dan kunt u ShowWindow of DoModal noemen naargelang het geval.

antwoordde op 04/08/2009 om 07:43
bron van user

stemmen
1

Dat is niet correct. Dit kan worden gedaan, als je kijkt naar MFC bron zul je je realiseren dat het modale dialogen zijn technisch gezien niet eens modaal. Je moet veel doen van mucken over om dit werk goed te maken, maar in principe hoef je alleen maar de ouder van het venster 'modale' uit te schakelen en weer in te schakelen wanneer het venster 'modale' sluit.

Ik heb dit gedaan persoonlijk dus dit kan werken voor u, maar ik weet niet precies wat je probeert te doen.

antwoordde op 04/08/2009 om 21:22
bron van user

stemmen
11

Zoals misschien iemand geïnteresseerd in iets dergelijks in de toekomst te doen zou kunnen zijn, is dit de manier waarop ik uiteindelijk deed:

Ik gebruik deze twee functies van hoofdframe: CMainFrame::BeginModalState()en CMainFrame::EndModalState().

Het probleem met deze functies is hetzelfde dat met het uitschakelen van de bovenliggende venster. Het venster dat u wilt modale ook wordt uitgeschakeld. Maar de oplossing is eenvoudig, gewoon weer in te schakelen het venster na het bellen 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();
}

Bedankt voor je hulp.

antwoordde op 06/08/2009 om 10:52
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more