Comment faire pour modifier un MFC Modeless Dialog pour être l'enfant d'un CView dans une application MDI?

StackOverflow https://stackoverflow.com/questions/2545517

  •  23-09-2019
  •  | 
  •  

Question

J'ai une application MFC qui est un Doc / View / mise en œuvre du cadre. Un dialogue est en cours d'exécution comme une boîte de dialogue qui apparaît modeless sur demande (à partir d'une option de menu). Je cherche à ajouter la boîte de dialogue modales à une vue enfant MDI. Au fond, je veux charger le modèle à partir du fichier de ressources, et créer comme un enfant du CView dans mon nouveau trio (doc / view / cadre) que je suis d'ajouter aux listes de modèles pour le MDI.

J'ai essayé quelques choses dans ma classe dérivée CMyView:

void CMyView::OnInitialUpdate()
{
  m_ListDialog = new Dialogs::CListDialog( m_config, this );
  m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
  m_ListDialog->ShowWindow( SW_SHOW );
}

Je l'ai essayé d'appeler SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL). J'ai essayé de modifier le fichier de ressources pour mettre l'enfant et le contrôle manuellement.

A chaque fois qu'il appelle Créer, est laissé à 0. Cela me dit m_hWnd du ListDialog ce n'est pas créé se correctement. Tout appel à SetWindowPos () ou ShowWindow () échoue parce que le m_hWnd est 0 (affirmation de débogage échoue).

Que dois-je faire pour obtenir une boîte de dialogue modales à construire, créé et apparaît comme un enfant à CMyView dans mon application MDI?

Était-ce utile?

La solution

Je ne sais pas. Mais ...
Vous avez plusieurs choix alternatifs qui pourraient convenir en fonction de la façon dont votre application doit apparence.

1 / utilisant CFormView. Si votre point de vue est dédié à la boîte de dialogue, vous pouvez alors obtenir une vue de la classe MFC CFormView. Le but de ce point de vue est d'afficher une boîte de dialogue.

créer une nouvelle Juste application à l'aide de l'assistant et je pense que vous devriez être en mesure de choisir la classe CFormView en tant que votre classe d'affichage, puis copiez le fichier généré dans votre application existaing.

2 / L'utilisation d'un CSplitterWnd. Une vue d'être un CFormView et l'autre votre CView actuelle.

3 / utilisant CDialogBar Si votre vue affiche déjà quelque chose, vous pouvez ajouter votre boîte de dialogue comme une barre d'outils en utilisant la CDialogBar de classe.

Autres conseils

travaille dans mon application MDI ...

void CGUIView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    p_Dlg = new CTestDlg;   // a CDialog derived class
    p_Dlg->Create(IDD_DIALOG1,this);
    p_Dlg->ShowWindow(SW_SHOW);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top