IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

acceder a un objet dans un CPropertySheet


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3
    Par d�faut acceder a un objet dans un CPropertySheet
    Voila rebonjours a tous,
    J'ai developp� une application en VC++ avec des objet de type CListBox et CProprtySheet (une dialog based app avec des onglets)..
    Mais je suis confront� a un petit souci : je souhaiterai que un bouton de mon onglet 1 (CMyPropertyPage1 m_page1) remplisse une CListBoxd de mon onglet 2 (CMyPropertyPage2 m_page2).. Evidement les controles sont des variables membre de ces deux classes.
    J'ai essay� a partir de l'onglet 1 d'accedder comme cela a mon control en vain...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    m_Page2.m_ctrlLoadComb.AddString("test");
    Sauriez vous me dire alors comment reccuperer le pointeur ou l'objet CListBox en page2?
    Merci beaucoup
    PS : je suis debutant.. je commence a bidouiller grace a vous tous et je vous en remercie

    EDIT : j'ai reussi a partir du CPropertySheet a acceder aux pages et aux controles sans probleme.. Faut ils donc que je passe par la pour transmettre une information de l'onglet 1 a l'onglet 2??

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3
    Par d�faut



  3. #3
    Candidat au Club
    Inscrit en
    F�vrier 2003
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 4
    Par d�faut
    Salut

    J'ai pas repondu plus tot en me disant que ma solution ne devait sans doute pas etre bonne. Pour communiquer des "donnees" entre plusieurs fenetre dialogue (qu'elles soient en onglets ou non), le mieux est de passe les donnees a la vue...

    Puisque tu est en dialog based, il faudrait les "stocker" au niveau de ta dialog contenant la boite a onglets.

    Ca me semble pas parfaitement propre, mais ca marche

    Voila

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3
    Par d�faut
    merci c'est evident que ce n'est pas tres "propre" mais bon.. si quelqu'un a une id�e plus avanc�e sur la question je suis preneur. Au pire je stock mes donnees dans un CObArray dans la DLG..
    j'imaginais que je pouvais reccuperer un pointeur sur l'onglet 2 ce qui m'aurai grandement simplifi� la tache ^^
    Merci quand meme

  5. #5
    Membre confirm�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2002
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 106
    Par d�faut
    Salut,
    une autre solution peut-�tre de passer la CPropertySheet en arguments dans le constructeur de ta CPropertyPage.

    Ensuite dans ta CPropertySheet, quand tu cr�es ta page tu fais:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    m_pPropertyPage= new CPropertyPage(this);
    Comme �a dans chacune de tes CPropertyPage tu as un pointeur vers le CPropertySheet et tu peux passer par l�.

    Je ne sais pas ce que vaut cette solution par rapport � l'autre, � toi de voir.

  6. #6
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Bonjour

    Voici une autre solution, en effet elles n'en finissent pas.

    Dans ta CPropertySheep ajoute une donn�e membre de type CStringArray qui est un tableau d'objet CString.

    Dans l'onglet 1 ie dans le code associ� au bouton du CPropertyPage (page1) tu app�les le parent CPropertySheep � l'aide de GetParent() ensuite stocke tout tes string dans CStringArray et apr�s dans la m�thode DoDataExchange de l'onglet 2 tu remplis ton ListBox

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    void CMyPage1::OnButton()
    {
                    UpdateData(TRUE);
                    CMySheep* pParent = ( CMySheep* ) GetParent();
                    pParent->m_StringArray[0] = "test1";
                    pParent->m_StringArray[1] = "test2";
                    pParent->m_StringArray[2] = "test3";
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void CMyPage2::DoDataExchange(CDataExchange* pDX)
    {
    	CPropertyPage::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CHeightPage)
    	// ...
    	//}}AFX_DATA_MAP
     
                    if( !pDX->m_bSaveAndValidate)
                    {
                       m_ctrlLoadComb.AddString(m_StringArray[0]);
                       m_ctrlLoadComb.AddString(m_StringArray[1]);
                       m_ctrlLoadComb.AddString(m_StringArray[2]);
                    }
    }
    Essaie ce code... Je ne l'est pas test� mais la logique me semble correcte
    En effet, je crois savoir pourquoi �a ne marche pas. Tant que l'onglet 1 est en premier plan, les autre controles des autres onglets ne sont pas encore activ�s au niveau de l'interface graphique (�cran) ainsi on ne peut acc�der � aucun contr�les quand il n'est pas visible � l'�cran (ie actif)

    Gabrielly

  7. #7
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    pour acceder a une page d'une CPropertySheet tu peux proceder comme suit:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // je suis dans une propertypage j'accede à la CPropertySheet
    CPropertySheet *pParent=static_cast<CPropertySheet *>(GetParent());
     
    // je demande la page numero 2 que je cast sur la classe PropertyPage correspondante
    CLastPage *pLastPage =static_cast<CLastPage *>(pParent->GetPage(2));
     
    // maintenant je fais ce que je veux ....
    if(pLastPage && IsWindow(pLastPage->GetSafeHwnd()))
    {
          CWnd *pWnd=pLastPage->GetDlgItem(IDC_STATIC2);
          if(pWnd) pWnd->SetWindowText("coucou");	
    }
    initialisation de la CPropertySheet pour comprendre l'exemple ci-dessus.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CPropertySheet sheet;
    CFirstPage firstPage;
    CLastPage lastPage;
     
    CComboPage	comboPage( IDD_COMBOPAGE );
     
    sheet.AddPage( &firstPage ); // page 0
    sheet.AddPage( &comboPage );// page 1
    sheet.AddPage( &lastPage ); // page 2
    attention avant d'acc�der a une autre page et a ses composants graphiques ,il faut qu'elle soit initialis�e sinon pb ,d'ou mon test IsWindow.

Discussions similaires

  1. [2.x] Acceder aux propri�t� de l'objet dans un FormType
    Par jejeman dans le forum Symfony
    R�ponses: 2
    Dernier message: 04/06/2014, 09h54
  2. Acceder aux attributs d'un objet dans un template
    Par cereal dans le forum Play!
    R�ponses: 2
    Dernier message: 28/06/2012, 14h28
  3. [POO] Comment acceder a un objet javascript instancie dans une page mere
    Par herbert dans le forum G�n�ral JavaScript
    R�ponses: 11
    Dernier message: 20/07/2006, 19h34
  4. [CR9] redimensionner un objet dans la section d�tail !
    Par LIM dans le forum SAP Crystal Reports
    R�ponses: 3
    Dernier message: 27/04/2004, 18h19
  5. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    R�ponses: 6
    Dernier message: 07/02/2003, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo