L'obtention de modifier la zone de texte à partir d'un dialogue MFC modale après il est fermé
À partir d'un dialogue MFC modale, je veux extraire du texte à partir d'une zone d'édition après la boîte de dialogue est fermée. J'ai tenté ceci:
CPreparationDlg Dlg;
CString m_str;
m_pMainWnd = &Dlg;
Dlg.DoModal();
CWnd *pMyDialog=AfxGetMainWnd();
CWnd *pWnd=pMyDialog->GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("huha max");
return TRUE;
Il ne fonctionne pas.
OriginalL'auteur abhinav | 2011-05-10
Vous devez vous connecter pour publier un commentaire.
La boîte de dialogue et de ses commandes n'est pas créé jusqu'à ce que vous appelez DoModal() et comme l'a déjà signalé, est détruit par le temps DoModal() retourne. À cause de qui vous ne pouvez pas appeler GetDlgItem() ni avant, ni après DoModal(). La solution de passer ou de récupérer des données à un contrôle, est d'utiliser une variable dans la classe. Vous pouvez le configurer lorsque vous créez une instance de la classe, avant l'appel à DoModal(). Dans OnInitDialog() vous mettre dans le contrôle de la valeur de la variable. Puis, lorsque la fenêtre est détruite, vous obtenez la valeur de la commande et de le mettre dans la variable. Alors que vous lisez la variable dans le contexte de l'appel.
Quelque chose comme ceci (notez que j'ai tapé directement dans le navigateur, donc il y aura peut-être des erreurs):
Alors vous pouvez l'utiliser comme ceci:
J'ai édité la réponse ci-dessus avec un exemple.
Thnx beaucoup de travail maintenant,vous avez pris beaucoup de poids sur moi.
il y a une marque de graduation, vous pouvez cliquer pour exprimer ce sentiment
Juste utilisé moi-même, merci. +1.
OriginalL'auteur Marius Bancila
UpdateData(TRUE)
À l'extérieur de la boîte de dialogue:
//la nouvelle valeur est toujours dans la dlg.m_myVariableName
OriginalL'auteur dwo
DoModal()
détruit la boîte de dialogue avant qu'il ne retourne et si la valeur n'est plus disponible.Il est difficile de dire pourquoi vous êtes réglage
m_pMainWnd
à votre boîte de dialogue. Pour être honnête, je ne suis pas vraiment sûr de ce que vous essayez de faire. C'est lié à causer des problèmes comme maintenantAfxGetMainWnd()
est cassé.De toute façon, vous ne pouvez pas obtenir la boîte de dialogue valeurs de contrôle après la boîte de dialogue a été détruit.
il n'est pas en cours d'exécution à partir d'ici ASSERT(::IsWindow(m_hWnd));
il n'est pas fonctionner en raison de cette erreur ASSERT(::IsWindow(m_hWnd));
OriginalL'auteur Jonathan Wood
J'utilise souvent
Avec dsohinh est une fenêtre de Dialogue que vous souhaitez pour obtenir des données mainform .
Après obtenir les données, puis d'appeler SetModifiedFlag(vrai) à la vue d'ensemble de données mis à jour.
appel UpdateAllViews(NULL) pour Définir les données sur mainform
OriginalL'auteur Nguyen Dinh Quy