Gérer une structure ou un objet dans le dialogue. Ajouter une méthode d'initialisation et de récupération de la structure. Installer les valeurs initiales dans le dialogue avant l'ouverture de celui-ci et récupérer les nouvelles valeurs sur OK.
Code :
- // Déclaration
- class DialogData{
- public:
- DialogData();
- private:
- CString m_strData1;
- ...
- friend class ContextDialog; // ContextDialog peut accéder aux membres protégés
- };
- class ContextDialog : public CDialog
- {
- public:
- ContextDialog(const DialogData& );
- virtual ~ContextDialog();
- private:
- enum { IDD = IDD_CONTEXTDIALOG };
- DialogData m_data; // données du dialogue échangeables par copie
- protected:
- void DoDataExchange(CDataExchange* pDX);
- public:
- void GetDialogData(DialogData& ) const;
- };
- // Implementation
- ContextDialog::ContextDialog(DialogData& dd)
- :m_data(dd), //copie de l'argument
- CDialog(IDD)
- {
- }
- ...
- void ContextDialog::DoDataExchange(CDataExchange* pDX)
- {
- // Echange de données en direct sur les variables facilité par le friend ContextDialog dans DialogData.
- DDX_Text(pDX, IDC_VAR1, m_data.m_strVar1);
- // autres variables à traiter...
- }
- void ContextDialog::GetDialogData(DialogData& dd) const
- {
- // copie des données non réflexive
- if (&this->m_data != &dd)
- dd = m_data;
- }
- // Code client
- DialogData dlgData;
- // TODO: initialiser dlgData
- ContextDialog dialog (dlgData);
- if (dialog.DoModal() == IDOK)
- {
- // écrase dlgData avec les nouvelles valeurs modifiées dans le dialogue
- dialog.GetDialogData(dlgData);
- }
|
Message édité par slash33 le 27-03-2006 à 09:32:28