CDialog et CView

[Résolu]
Signaler
Messages postés
13
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
25 février 2006
-
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
-
Bonjour à tous....

J'ai un CDialog ouvert en DoModal() par un CView... j'aimerais savoir si je peu créer un évenement dans mon CDialog qui redéssinerais le CView....(tout en laissant le CDialog ouvert)

Merci de votre bonté divine....

Gedeon

1 réponse

Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
15
1) CView.h



Dans la MESSAGE_MAP
de ta classe CView, tu déclares un nouveau message, auquel tu associes le nom de son gestionnaire (handler)



BEGIN_MESSAGE_MAP(CShapesView, CView)

ON_MESSAGE(WM_USER_CHANGE_OBJECT_PROPERTIES, OnChangeObjectProps)

//{{AFX_MSG_MAP(CShapesView)

ON_WM_LBUTTONDOWN()

...

//}}AFX_MSG_MAP

END_MESSAGE_MAP()



2) CView.c



Dans la liste des gestionnaires de messages de ta classe CView, tu déclares le gestionnaire du nouveau message



// Generated message map functions

protected:

//{{AFX_MSG(CShapesView)

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

...

//}}AFX_MSG


afx_msg LRESULT OnChangeObjectProps(WPARAM wParam, LPARAM lParam);

DECLARE_MESSAGE_MAP()

};




3) CView.c



Tu construit ton gestionnaire de message pour que la CView modifie ses membres, ou leur communique un signal



LRESULT CMyView::OnChangeObjectProps(WPARAM, LPARAM)

{

// The user-defined WM_USER_CHANGE_OBJECT_PROPS message is sent

// by the modal CModalShapePropSheet when the user chooses Apply Now,

// or by the modeless CModelessShapePropSheet when the user

// changes any setting in a property page.



// Appliquer les modifications aux membres de la CView

.....



GetDocument()->SetModifiedFlag();

GetDocument()->UpdateAllViews(NULL);

return 0;

}


4) CDialog.c



Dans ta classe CDialog, tu construit un bouton que tu relies à la fonction OnApply

qui va elle envoyer le message à la CView.



void CMyDialog::OnApply()

{

CView* pView = ...->GetActiveView();

pView->SendMessage(WM_USER_CHANGE_OBJECT_PROPERTIES, 0, 0);

....

}