Bonjour,
Voici mon probl�me. J�ai cr�� une application SDI. Ma classe d�riv�e de CView affiche dans la zone client des objets g�n�r�s avec OpenGL. Cette classe g�re les �v�nements souris et clavier qui modifient les objets affich�s.
J�affiche une bo�te de dialogue non-modale qui doit communiquer avec ma vue dans les deux sens :
- les �v�nements souris et clavier modifient les contr�les de la bo�te,
- les contr�les de la bo�te modifient les objets affich�s.
Je g�re le premier sens en gardant dans ma vue le pointeur vers la bo�te de dialogue :Mon probl�me est de r�cup�rer dynamiquement la modification des contr�les de la bo�te de dialogue pour modifier mon dessin. J�ai essay� :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 simBaseDlg = new CDialogSimBase(this); simBaseDlg->Create(IDD_DIALOG_SIM_BASE);
- de mettre dans ma classe � CDialogSimBase � un pointeur de fonction qui pointerait vers une fonction de ma classe Vue mais �a ne fonctionne pas. J�ai un conflit au moment de la compilation avec une histoire de __cdecl que je n�ai pas r�ussi � g�rer,
- d�utiliser les messages priv�s. J�ai trouv� une explication tr�s compl�te sur le site mais je n�ai pas r�ussi � l�appliquer dans mon cas :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 //Dans linclude de CDialogSimBase #define WM_TEST WM_USER+100
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 // Dans CDialogSimBase je veux que la fermeture de la boîte génère un message void CDialogSimBase::OnClose() { this->GetParent()->PostMessage(WM_TEST); CDialog::OnClose(); }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 //Dans linclude de ma vue // Generated message map functions protected: //{{AFX_MSG(CTest_oglView) afx_msg void OnDestroy(); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnViewSimBase(); //}}AFX_MSG long OnReceiveTest(WPARAM wparam, LPARAM lparam); DECLARE_MESSAGE_MAP()J�insiste sur cette mani�re car elle me para�t coller d�avantage avec le concept de programmation Windows. Mais peut-�tre que je me trompe. J�ai l�impression que je cherche compliqu� alors que �a devrait �tre simple de r�cup�rer des donn�es issues d�une bo�te de dialogue, non ? Merci d�avance pour le coup de main.
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 //Dans ma vue BEGIN_MESSAGE_MAP(CTest_oglView, CView) //{{AFX_MSG_MAP(CTest_oglView) ON_... messages divers //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND messages divers ON_MESSAGE(WM_TEST, OnReceiveTest) END_MESSAGE_MAP() long CTest_oglView::OnReceiveTest(WPARAM wparam, LPARAM lparam) { MessageBox("Message de fermeture"); return 0L; }
EDIT PetitPapaNo�l : Merci de penser aux balises CODE (bouton #) pour une meilleure lisibilit�...
Partager