9
votes

Convertir une boîte de dialogue sans faille en mode modal au moment de l'exécution

J'ai une boîte de dialogue (classe dérivée CDIALOG) pouvant être utilisée de deux manières différentes (mode édition et mode de programmation).

Lorsque la boîte de dialogue est ouverte pour être utilisée en mode de programmation, il s'agit d'une boîte de dialogue branle utilisée pour modifier la vue principale (type de barre d'outils). Lorsqu'il est ouvert en mode édition, l'utilisateur peut modifier la configuration de la boîte de dialogue elle-même et, dans ce cas, il s'agit d'une boîte de dialogue modale.

En ce moment, ils sont deux dialogues différents avec peu de différences et je voudrais juste vouloir simplement vouloir la boîte de dialogue et laisser passer l'utilisateur entre le mode de programmation et le mode édition simplement en appuyant sur un bouton de la boîte de dialogue.

Donc, j'ai besoin de convertir la boîte de dialogue indemne dans une boîte de dialogue modale et inversement au moment de l'exécution. Y a-t-il un moyen de faire quoi?

Merci.


0 commentaires

3 Réponses :


2
votes

qui ne peut pas être fait facilement sans fermer et réouvrir la boîte de dialogue. Ensuite, vous pouvez appeler Showwindow ou Domodal selon le cas.


0 commentaires

1
votes

Ce n'est pas correct. Cela peut être fait si vous regardez la source de MFC, vous vous rendrez compte que ce sont des dialogues modales ne sont pas techniquement modaux. Vous devrez faire beaucoup de fumée sur le point de faire correctement ce travail, mais il vous suffit de désactiver le parent de la fenêtre «modale» et de le réactiver lorsque la fenêtre «modale» se ferme.

Je l'ai fait personnellement pour que cela puisse travailler pour vous, bien que je ne suis pas vraiment sûr de ce que vous essayez de faire.


1 commentaires

Que voulez-vous dire avec désactiver / activer le parent? J'ai déjà essayé d'appeler getparent () -> EnableWindow (FALSE) / GETPARENT () -> EnableWindow (T RUE), mais cela n'a pas fonctionné car ma boîte de dialogue est également désactivée. La fenêtre mère se trouve être le cadre principal que je ne sais pas si cela est pertinent. BTW: Ce que je veux faire, c'est ouvrir une boîte de dialogue sans faille (Créer / showwindow) lorsque l'utilisateur appuie sur un bouton. La boîte de dialogue devient modale. Si l'utilisateur appuie à nouveau le bouton, la boîte de dialogue devient à nouveau sans refuge.



13
votes

Peut-être que quelqu'un pourrait être intéressé à faire quelque chose de similaire dans le futur, c'est la façon dont je l'ai finalement fait:

J'utilise ces deux fonctions de la trame principale: CMainFrame :: BeginModalState () et CMainFrame :: endmodalstate () .

Le problème de ces fonctions est le même avec la désactivation de la fenêtre mère. La fenêtre que vous souhaitez rendre modale est également désactivée. Mais la solution est facile, il suffit de réactiver la fenêtre après avoir appelé beginModalState . xxx

merci pour votre aide.


0 commentaires