CDialog et CView

Résolu
cs_GEDEON Messages postés 13 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 25 février 2006 - 20 févr. 2006 à 12:40
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 20 févr. 2006 à 22:41
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

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
20 févr. 2006 à 22:41
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);

....

}
3