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

C++ Discussion :

Tab Control onglets "dépendants"


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Tab Control onglets "dépendants"
    Bonjour à tous,

    Je suis actuellement en train de coder une application en C++, en MFC pour être exact. Il s'agit d'une application destinée à contrôler un moteur via un protocole précis.

    Voulant améliorer l'aspect graphique du programme, j'ai cherché à créer une "Tab Control" avec plusieurs onglets. L'idée est de séparer toutes les grosses parties concernant le moteur. Un tutoriel trouvé sur internet a répondu à mes attentes : celui-ci, très clair.

    Mais il y a un hic, j'arrive bien à créer mes différentes pages sauf qu'elles sont totalement indépendantes l'une de l'autre. On a une page C++ et un .h pour chaque onglet. Ma question peut paraite stupide, mais comment les rendre dépendante ? Par exemple, j'ai absolument besoin qu'une étape dans un onglet se termine pour activer et faire marcher une autre étape d'un autre onglet.

    En bref, l'idéal serait juste de pouvoir "ranger" mes différentes parties dans les onglets. Puisqu'il ne s'agit que de ça finalement, juste ranger pour avoir un truc plus clair. Tout en gardant les différentes dépendances.

    Cordialement

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je vais détailler un peu plus mon problème, voilà plusieurs heures et jours que j'essaie une tonne de solutions sans aucun succès. Je désespère.

    Premier point : Voici la tête graphique de mon programme. Les rectangles vert sont les parties qui doivent aller dans les onglets. (A droite de l'interface, on peut voir que j'ai inséré une Tab Control avec un onglet et un bouton test)

    Deuxième point : Mon but n'est vraiment que de ranger ces parties vertes. A la limite, je m'en fiche complètement de conserver une immense page de code, c'est juste un tri.

    Troisième point : Problème ? Avec cette usine à gaz, pas moyen de juste ranger comme je le souhaite. Faut forcément créer des pages externes, des classes et cie pour y arriver. Chose que j'ai faite en suivant ce tuto.

    Bien.

    Pour le moment, j'ai crée un seul onglet. J'ai donc une page .cpp et une page .h pour cet onglet. J'ai appelé le tout Tab1.


    Tab1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class CTab1 : public CDialogEx
    {
    	DECLARE_DYNAMIC(CTab1)
     
    public:
    	CTab1(CWnd* pParent = NULL);   // standard constructor
    	virtual ~CTab1();
     
    // Dialog Data
    	enum { IDD = IDD_TAB1 };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
     
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnBtnOBDWrite();
    };
    Tab1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include "stdafx.h"
    #include "TestApp.h"
    #include "Tab1.h"
    #include "TestAppDlg.h"
    #include "afxdialogex.h"
     
    // CTab1 dialog
     
    IMPLEMENT_DYNAMIC(CTab1, CDialogEx)
     
    CTab1::CTab1(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CTab1::IDD, pParent)
    {
     
    }
     
    CTab1::~CTab1()
    {
    }
     
    void CTab1::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
     
     
    BEGIN_MESSAGE_MAP(CTab1, CDialogEx)
    	ON_BN_CLICKED(IDC_btnOBDWrite, &CTab1::OnBtnOBDWrite)
    END_MESSAGE_MAP()
    On notera le afx_msg void OnBtnOBDWrite(); qui n'est en fait que le fameux bouton. Bouton qui fait normalement parti d'une autre classe. Puisque lorsqu'on est censé appuyer dessus, c'est toute l'autre classe qui doit s'activer. (A la base, ce bouton faisait donc parti de l'autre classe)

    Je ne vous montre pas le .cpp et le .h de cette fameuse classe, c'est un monstre et ça nous aidera pas tellement. On a qu'à l'appeler CPrincipal.


    Le problème :

    Je pense que vous avez compris. Le problème de cette structuration avec une page .h et .cpp pour chaque onglet rend ces derniers indépendants. Ce qui fait que lorsque je tape mon code sur cette page :

    Tab1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CTab1::OnBtnOBDWrite()
    {
         // Plein d'appelles de fonctions de la classe CPrincipal.
    }
    Ca ne marche pas. Normal puisque j'appelle une classe dans une autre.


    Où j'en suis maintenant :

    J'ai essayé plusieurs techniques pour appeler ma classe. Sans réel succès. Par exemple :

    Placement d'un friend class CTab1; dans la classe CPrincipal. Avec un #include "CPrincipal.h" dans Tab1.cpp. Puis, création d'une classe temporaire pour ma fonction :

    Tab1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CTab1::OnBtnOBDWrite()
    {
        CPrincipal Principal;
     
         Cprincipal.FonctionCprincipal();
    }
    Ce qui, d'un point de vu de code, est juste. J'ai pas d'erreur. Mais ça plante.

    J'ai également fait l'inverse. Placement de ce code dans la page CPrincipal.cpp. Ce qui marche aussi, pas d'erreur. J'ai donc inversé le placement du friend etc... Même problème, le code est bon apparemment, mais ça plante.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    la réponse va paraître stupide, mais le fait est que si tu as besoin d'accéder aux données, il te faut juste un moyen d'y accéder.
    Et là tu es libre de faire ce que bon te semble, utiliser des pointeurs en paramètres, des méthodes accessibles, un manager par dessus, des singletons, globales.....
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Tu me conseilles quoi comme méthode rapide ?

    J'avais également déjà essayé les fonctions globales, mais y a des erreurs de Linkage partout que je n'arrive pas à éliminer.

    C'est en fait un code que j'ai repris pour un projet universitaire avec une durée précise. Je cherche donc surtout une solution rapide pour ne pas avoir à modifier trop de codes, ce qui me demanderait un temps fou, ce que je n'ai pas.

    De plus, pour être franc, je n'ai jamais vu les langages objet. Du coup, j'essaie d'apprendre les classes et cie sur le tas. Pour arriver au résultat actuel, j'ai surtout fouillé internet et je me suis débrouillé. Je commence à bien comprendre certaines notions en lisant des tutos en biais mais c'est loin d'être solide. Je pense que ce truc des onglets fait appelle à beaucoup trop de connaissances d'un seul coup pour moi.


    Et en effet, il me paraissait évident que la réponse serait simple. Tant pis, j'vais essayer quelques dernières tentatives, j'abandonnerai si je n'obtiens toujours rien.

    Merci de ta réponse.

Discussions similaires

  1. les onglets d'un tab control
    Par solitude dans le forum C#
    Réponses: 1
    Dernier message: 01/08/2007, 17h51
  2. Réponses: 3
    Dernier message: 07/07/2007, 10h35
  3. Couleur et onglet dans le Tab Control Page
    Par loufab dans le forum IHM
    Réponses: 15
    Dernier message: 04/05/2005, 00h04

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