2010-10-26 5 views
2

J'ai une fenêtre avec les propriétés suivantes définies int il .rc fichier:DoModal() ne mettant pas en place boîte de DLG modale

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 

Il a une classe associée (dérivée de CDialog) et quand j'instancier , puis appelez cet objet DoModal() sur il n'est pas vraiment modal - je peux cliquer sur la fenêtre "parent".

CMyDlg dlg; 
int result = dlg.DoModal(); 

La fenêtre "parent" est une boîte de dlg mais traitée comme une fenêtre principale. ses propriétés sont les suivantes:

STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME 
CAPTION "My Main App" 
MENU IDR_MENU_MAIN 

Autres boîtes DLG J'appel de la fenêtre principale avec DoModal je veux partir comme non modal. Mais cet autre je voudrais avoir modal.

Je suis un peu confus au sujet de ce qui se passe. Quelqu'un peut-il expliquer comment obtenir cette boîte de DLG « enfant » d'être modal (tout en permettant à d'autres « enfants » de ne pas être modale

Informations complémentaires:

L'interface graphique de cette application n'est pas le fil conducteur de la Il s'agit d'une application de ligne de commande qui démarre un autre thread et charge une DLL qui contient l'interface utilisateur graphique .. Je ne suis pas sûr si cela a une incidence sur le problème

Fenêtre dlg principale == A Ce nouveau dlg fenêtre de la boîte Je veux me comporter comme modal == B Une boîte de dlg différente == C

Wit hin A: l'appel B.DoModal n'est pas modal, mais je voudrais qu'il soit Dans A: l'appel C.DoModal n'est pas modal, et je veux le garder ainsi

Dans C, si j'appelle D. DoModal il est modal et je veux garder cette façon (si l'application ne montre la fonctionnalité modale)

Plus d'informations effrayant

de A: appeler le fichier standard ouvert ou enregistrer en tant que boîtes DLG entraînent NON mODAL boîtes de dlg.

CFileDialog dlg(TRUE); 
dlg.DoModal(); 

Ceci n'est pas non plus souhaitable.

Ces deux questions semblent avoir de bonnes possibilités pour l'une des questions, mais ils ne traitent pas comment faire que le fichier standard ouvert/sauvegarde dlgs qui se sont appelés modal ...

Convert a modeless dialog to modal at runtime How do I create Modal dialog in worker thread(Non-UI thread)?

Répondre

2

Je ne vois pas que vous spécifiez une fenêtre parent pour vos boîtes de dialogue modales.

Peut-être que c'est ce qui manque.

+0

Doh! Sensationnel. pour une raison quelconque j'ai négligé cela - cherchait des problèmes plus subtils ... – Tim

-1

Si vous chargez la boîte de dialogue à partir du fichier .rc, spécifiez l'ID de ressource lors de la création de l'objet de boîte de dialogue.

CMyDlg dlg(IDR_DLG1); 
int result = dlg.DoModal(); 
+1

Il n'y a pas un tel constructeur pour CMyDlg qui prend seulement ID? – zar

Questions connexes