Salut,
J'suis bloque sur Visual en MFC. J'ai cree une boite de dialogue que j'aimerais ouvrir en appuyant sur un bouton depuis ma boite de dialogue principale mais j'ai aucune idee de comment faire. Quelqu'un a une idee?
Cimer
Salut,
J'suis bloque sur Visual en MFC. J'ai cree une boite de dialogue que j'aimerais ouvrir en appuyant sur un bouton depuis ma boite de dialogue principale mais j'ai aucune idee de comment faire. Quelqu'un a une idee?
Cimer
Très simple, si AddBoitier est ta classe de type CDialog, alors tu dois faire :
Et c'est tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 AddBoitier dlg(*myConn); if (dlg.DoModal()==IDOK) { //Mettre ton code ici }
Bien à toi,
Si tu n'utilise pas les MFC, utilise le message WM_COMMAND pour detecter une pression sur ton bouton, puis DialogBox() pour creer la nouvelle boite de dialogue a partir des resources.
ke ce soit depuis un bouton ou depuis un menu,le processus est le meme...
Tu vas dans les ressources,tu crees ton dialogue.
Kan tu aurais fini de creer ton dialogue,tu appuies la combinaison Ctrl+W pour acceder a ClassWizard.
Une fenetre te demande de creer une classe pour ton dialogue,tu le fais.
Toujours dans classwizard,tu selectionnes l'ID (IDC_BOUTON21 pqr exemple)du bouton sur lekel tu veux detecter le clik creant l'ouverture du dialogue.
Tu selectionne la classe CMonAplliDoc et tu cli sur ajouter la fonction.
Tu obtiendras le code suivant:
CMonAppliDoc::OnBouton21()
{
CMonDialogue dlg;
dlg.DoModal();
}
Du courage,mais si t'avais deja resolu ton inquietude,mets le tag [Resolu]
Merci
Bonjour, Désolé pour le remontage de topic mais voila je viens de tester ca sur mon projet et aucune fenetre ne s'affiche
J'ai un bouton ID_BOUTON_1 dans ma fenetre principale MainFrm.cpp
Je créer ma dialog dans les ressources, je créer la classe associer CMyDlg
Il me crée un MyDlg.cpp
Je selectionne mon ID_BOUTON_1 dans le classwizard et je selectionne Mainfrm.cpp et la je clique sur COMMAND
Dans l'exemple au dessus je vois pas c'est quoi la classe MonAppliDoc
Merci
dans les ressources , ouvres la boite de dialogue principale ou tu as crée le bouton .
et Double click sur le bouton , il va te proposer automatiquement un nom de fonction . tu cliques OK et tu peux mettre ton code correspondant au click de ce bouton . c'est a dire ouvrir ta 2eme boite de dialague avec le code donné précedemment .
J'ai reussi avec CDialog dlg(ID_MABOITEDEDIALOGUE)
remontage de topic encore
en fait, c quasi le mem prob (a partir d'un menu, pas d'un bouton), donc je crée pas d'autre topic, mais si necessaire pas de souci
sous visual studio 2003:
donc comme l'a si bien indiqué feed_our_vision, je vais dans la vue ressource, click droit sur app.rc, add resource, puis dialog, puis new, ensuite click droit sur la boite de dialogue(elle a juste deux bouton ok, et cancel par defaut, je laisse tel quel), add class, et je rempli, mais je peux pas choisir le bouton/menu qui va ouvrir cette boite de dialogue.
je vais dans la fonction du menu en question, je rajoute le code
ca compile (en rajoutant le bon include), mais qd je click sur le menu voulu, j'ai un "debug assertion failed" :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CMonDialogue dlg; dlg.DoModal();
j'ai vu d'autre code, comme
avec dlg en pointeur, mais je pense mal remplir les param, car je cast, et au final, ca fait le meme resultat qu'avec Domodal()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dlg->Create(...) dlg->ShowWindow(...)
qu'est que je fais pas ?
si ça plante sur le doModal,
c'est qu'il y a peut etre entre les controles et les variables attachées.
dans ce cas remonte la pile des erreurs ,pour trouver l'appel dans ton code qui provoque l'assertion.
ou donne nous la ligne de code qui provoque l'erreur.
voila les fichiers generés par la dialogbox, que j'ai appelé optionbox, car c'est la boite de dialogue pour les options:Envoyé par farscape
pour le .h
pour le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #pragma once #include "resource.h" // Optionbox dialog class Optionbox : public CDialog { DECLARE_DYNAMIC(Optionbox) public: Optionbox(CWnd* pParent = NULL); // standard constructor virtual ~Optionbox(); // Dialog Data enum { IDD = IDD_DIALOG1 }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() };
pr le moment, j'ai rien mis dedans, visual a generée la boite de dialogue avec deux boutons ok, et cancel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 // optionbox.cpp : implementation file // #include "stdafx.h" //#include "win_pnt4.h" #include "optionbox.h" // Optionbox dialog IMPLEMENT_DYNAMIC(Optionbox, CDialog) Optionbox::Optionbox(CWnd* pParent /*=NULL*/) : CDialog(Optionbox::IDD, pParent) { } Optionbox::~Optionbox() { } void Optionbox::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(Optionbox, CDialog) END_MESSAGE_MAP() // Optionbox message handlers
et pour le code qui plante, effectivement, ca doit etre au domodal, mais pourquoi ?
voila la fonction appellé lors d'un click sur le menu:
qq essai en commentaires ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private: System::Void menuItem2_Click(System::Object * sender, System::EventArgs * e) { Optionbox op_; op_.DoModal(); // this->optionbox = new Optionbox((CWnd *)get_Handle().ToPointer()); // this->optionbox->DoModal(); // this->optionbox->Create((LPCTSTR)Optionbox::IDD); // this->optionbox->ShowWindow(SW_SHOW); }
si je met:
a la place, ca marche, donc ca viens pas du menu
Code : Sélectionner tout - Visualiser dans une fenêtre à part AfxMessageBox("coucou");
8)
je suis tjrs dessus, entre deux bout de code ...
moi, la classe generée prend un cWnd* en entrée, du coup, je sais pas quoi mettre :Envoyé par Sh4rk
autres questions, ya pas un moyen moins couteux pour recuperer le HWnd que
et c quoi la diff avec cWnd :
Code : Sélectionner tout - Visualiser dans une fenêtre à part (HWND)get_Handle().ToPointer()
bon, j'ai en parthwe trouvé ce que je cherchais, ie passer de hwnd a cwnd, mais ca marche tjrs pas, et j'ai bien l'impression de me compliquer la vie
http://www.codeguru.com/forum/showth...highlight=cwnd
ce qui donne
mais ca sort tjrs et encore avec un assert des que je click sur le menu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CWnd* pWnd = CWnd::FromHandle((HWND)get_Handle().ToPointer()); Optionbox op_(pWnd); op_.DoModal();
Salut, quel est le plantage exact en fait (message d'erreur, assertion) ?
j'ai mis des breakpoint sur les trois ligne, et il sort bien sur le domodal.Envoyé par Brouzouf
edit --> au fait, salut
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 debug assertion failed! blahblah File: blahblah\vc\MFCATL\ship\atlmfc\include\afxwin1.inl ligne: 26 blahblah :D
edit2 --> qqun d'autre semble avoir eu un pb analogue mais pas de reponse ...
http://www.codeguru.com/forum/showth...ht=afxwin1.inl
tu peux preciser ton contexte de projet ?
ce n'est certainement un application MFC classique.
alors, j'ai meme refait un nouveau proj, histoire de bien verifier que yaurai pas des pb d'includes...Envoyé par farscape
je demarre en faisant new project, visual c++, windows forms appli, puis je met un bouton ds la fenetre, et je fais ce qui est decrit plus haut, cad ds ressource, ajouter ds app.rc la boite de dialogue.
et ca met la meme erreur a domodal.
bizarrement le constructeur de la boite de dialogue attend un cWnd*
Code : Sélectionner tout - Visualiser dans une fenêtre à part ption(CWnd* pParent = NULL);
personne
je suis la msdn:
http://msdn.microsoft.com/library/de...menuoption.asp
qd je vais dans class view, et que je vois les proprietés de ma classe Option, ds events, je n'ai que IDCANCEL et IDOK, avec des + chacuns.In Class View, select the document class (CDisplayDialogDoc). In the Properties window, click the Events button. Double-click the ID of the menu command (ID_VIEW_TEST) in the left pane of the Properties window and select Command. In the right pane, click the down arrow and select <Add> OnViewTest.
mais elle sert a quoi cette etape 4 :
je viens d'uploader le proj, fait 1mo tout de meme, c'est le .ncb qui est lourd, je sais pas pourquoi ...
http://zedine.free.fr/visual/test_dialog.rar
je continu de chercher, ici un probleme analogue
http://www.wilmott.com/messageview.c...&threadid=7498
d'autre topic parle de rajouter ca avt la creation de la boite de dialogue:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
edit --> le modulestate sert probablement au dll importé, donc ca a rien avoir ...
sinon, ca plante bien au domodal, j'ai mis des messagebox autour d Option opt, et ca passe.
il plante exactement a la ligne 490 dans dlgcore.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part HINSTANCE hInst = AfxGetResourceHandle();
Salut,
Je viens de survoler à nouveau ton post.
Je crois qu'il y a méprise ..
Tu ne peux mélanger du code .net (windows form) et des MFC .
en gros sa plante parce que les MFC ne sont pas initialisées.
Si tu veux utiliser les boites de Dialogues MFC il te faut créer un projet MFC et non windows form (.net).
ou alors j'ai rien compris au film. (c'est possible).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager