[MFC] Edit: Envoie d'un message vers mes Dialogues..

Edit: Envoie d'un message vers mes Dialogues.. [MFC] - C++ - Programmation

Marsh Posté le 10-09-2003 à 04:11:16    

Salut,
J'ai créé mon propre contrôle qui affiche une liste de dates et j'aimerais quand l'utilisateur choisit une autre date que le contrôle lui-même prévienne de ce changement au dialogue dans lequel il se trouve !
 
En gros, je voudrais reproduire le même principe que le message clique (ON_BN_CLICKED(IDC_CANCEL, OnBnClickedCancel)) d'un simple CButton mais avec ma fonction personnelle naturellement sans pour autant devoir créé des messages pour les appeler ensuite avec SendMessage.
 
 
Style :
 

Code :
  1. class MonControl : public CWnd
  2. {
  3. public :
  4.    void Refresh() ;
  5. afx_msg void OnPaint();
  6. } ;
  7. void MonControl::OnPaint()
  8. {
  9. // Je préviens mon dialogue qu?il y a eu un changement
  10.         // Et dans un style d'héritage du temps, la fonction est
  11.         // reflétée dans mon dialogue.
  12. Refresh() ;
  13. }
  14. //----------------------------------------------//
  15. class MonDialog : public CDialog
  16. {
  17. public:
  18.   void Refresh();
  19. };
  20. BEGIN_MESSAGE_MAP(CCommandeDlg, CDialog)
  21. ON_BN_CLICKED(IDC_MONCONTROL, Refresh)
  22. END_MESSAGE_MAP()


 
 
J'espère que quelqu'un d'assez calé en MFC pourra m'aider.
 
Merci bcp de votre aide.


Message édité par iS@mi le 13-09-2003 à 10:10:37
Reply

Marsh Posté le 10-09-2003 à 04:11:16   

Reply

Marsh Posté le 10-09-2003 à 08:06:36    

Tu dis que tu veux des messages, donc a part Send ou Post message euh y a pas grand chose d'autre en user define.
 
Sinon, c faire ds ta dlg une methode accessible par ton controle.
 
Ou alros j'ai rien compris (mais bon ton exemple c un MESSAGE qui est envoye, le WM_PAINT, donc cf 1)

Reply

Marsh Posté le 10-09-2003 à 13:06:38    

VisualC++ a écrit :

Tu dis que tu veux des messages, donc a part Send ou Post message euh y a pas grand chose d'autre en user define.
 
Sinon, c faire ds ta dlg une methode accessible par ton controle.
 
Ou alros j'ai rien compris (mais bon ton exemple c un MESSAGE qui est envoye, le WM_PAINT, donc cf 1)


 
 
En gros j'ai une liste de dates qui s'affichent dans mon control et qd l'utilisateur clique sur une autre date, j'ai besoin d'informer le dialogue où se trouve celui-ci pour effectuer certain changement dans le dialogue.
 
Pour cela, j'aurais besoin que mon contrôle lorsqu'il y un changement informe le dialogue où il se trouve de cela pour que je puisse faire les changements (j'ai une série de statictext à modifier, etc, etc).


Message édité par iS@mi le 10-09-2003 à 13:06:54
Reply

Marsh Posté le 10-09-2003 à 13:27:29    

Et un SendMessage() vers ton Dialog ca suffit pas ? Ou tu as d'autres contraintes ?

Reply

Marsh Posté le 10-09-2003 à 13:56:58    

Ou PostMessage() avec WM_USER + x (paraît qu'il faut que x soit assez grand ?? j'utilise 1, 2, 3 sans pb (apparent))

Reply

Marsh Posté le 11-09-2003 à 09:51:56    

CARBON_14 a écrit :

Ou PostMessage() avec WM_USER + x (paraît qu'il faut que x soit assez grand ?? j'utilise 1, 2, 3 sans pb (apparent))


 
Finalement, je me suis résigné à utiliser le SendMessage (j'imaginais qu'il y avait une autre méthode).
 
Pour le problème avec le WM_USER, il y a qqs explications ici :
 
http://msdn.microsoft.com/library/ [...] essage.asp
 
 
Merci

Reply

Marsh Posté le 11-09-2003 à 10:43:10    

Vaut mieux utiliser WM_APP au lieu de WM_USER..

Reply

Marsh Posté le 11-09-2003 à 13:59:41    

WM_USER semble dater du 16 bits. Ai pas pu trouver WM_APP sous win 3.11 :D...  
 
Windows est "fait" de messages, on rajoute ses messages persos pour nos besoins, et ça roule.

Reply

Marsh Posté le 13-09-2003 à 07:32:26    

CARBON_14 a écrit :

WM_USER semble dater du 16 bits. Ai pas pu trouver WM_APP sous win 3.11 :D...  
 
Windows est "fait" de messages, on rajoute ses messages persos pour nos besoins, et ça roule.


 
CARBON_14 aurais-tu une idée de comment pouvoir envoyer un message à toutes les fenêtres de mon applications sans pour autant avoir les variables de celles-ci ?
 
J'ai longtemps programmé dans l'infercafe MacOS et il y avait un systèm du style :
 

Code :
  1. for(int i = 0; i<GetDialogCount(); i++)
  2. {
  3. Dialog *dlg = GetDialogID(i);
  4. // là, suffisait d'envoyer le message dans chaque dialogue
  5. }


 
Merci


Message édité par iS@mi le 13-09-2003 à 07:46:16
Reply

Marsh Posté le 13-09-2003 à 10:42:13    

Ca donne ca a peu pres (pas teste)
 

Code :
  1. int iID = 0;
  2. CWnd* pWnd = NULL;
  3. while( (pWnd = GetDescendantWindow(iId)) != NULL) {
  4.     iID++;
  5.     ..... traitement
  6. }


Message édité par VisualC++ le 13-09-2003 à 10:54:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed