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 :

Bug de RichEdit ?


Sujet :

MFC

  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut Bug de RichEdit ?
    Bonjour,

    Je souhaite afficher des informations dans une dialogBox, puis après dans une FormView.
    Les informations sont bien affichées dans la dialogBox, mais ne s'affichent pas dans la FormView.

    Pourtant, l'affichage dans la DialogBox montre que j'ai bien mis AfxInitRichEdit2 dans InitClass, alors pourquoi l'affichage ne se fait pas après ?
    Les informations sont globales, donc connues de tout le monde a priori ...

    D'où peut bien provenir une telle erreur ?

    Merci d'avance pour vos réponses éclairées et éclairantes...

    PS : Voici les deux codes, le premier pour la dialogBox, le deuxième pour le FormView

    Les deux fonctions ont, dans l'entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct {
    	CString identifiant;
    	CString passwd;
    	CString droit;
    	int type_test;
    	CString reference;
    }donnees;
    extern donnees compte;
    DialogBox :
    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
     
    CDlgMasque::CDlgMasque(CWnd* pParent /*=NULL*/)
    	: CDialog(CDlgMasque::IDD, pParent)
    	, m_srefmasque(_T(""))
    	, m_CNom(_T(""))
    {
    	m_CNom = compte.identifiant;
    }
     
    CDlgMasque::~CDlgMasque()
    {
    }
     
    void CDlgMasque::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_REFMASQUE, m_srefmasque);
    	DDX_Control(pDX, IDC_NOM, m_ctrlNom);
    	DDX_Text(pDX, IDC_NOM, m_CNom);
    }
    FormView :
    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
    30
    31
    32
     
    CMasque_Form_View::CMasque_Form_View()
    	: CFormView(CMasque_Form_View::IDD)
    	, m_CIdentif(_T(""))
    	, m_CType_Test(_T(""))
    	, m_CReference(_T(""))
    {
    	m_bStartStop = FALSE ;
    	srand( (unsigned)time( NULL ) );
    	m_CReference = compte.reference;
    	m_CIdentif = compte.identifiant;
    	if (compte.type_test == 0)
    		m_CType_Test = "Masque";
    	if (compte.type_test == 1)
    		m_CType_Test = "Soupape tarée";
    	if (compte.type_test == 2)
    		m_CType_Test = "Détendeur";
    }
     
    CMasque_Form_View::~CMasque_Form_View()
    {
    }
    void CMasque_Form_View::DoDataExchange(CDataExchange* pDX)
    {
    	CFormView::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_IDENTIF, m_ControleIdentif);
    	DDX_Control(pDX, IDC_TYPETEST, m_ControleTypeTest);
    	DDX_Control(pDX, IDC_REFERENCE, m_ControleReference);
    	DDX_Text(pDX, IDC_IDENTIF, m_CIdentif);
    	DDX_Text(pDX, IDC_TYPETEST, m_CType_Test);
    	DDX_Text(pDX, IDC_REFERENCE, m_CReference);
    }
    Personnellement, je ne vois pas la différence ...

  2. #2
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Personne n'a d'idées, par hasard ?
    J'ai toujours pas trouvé comment faire...
    Si quelqu'un pouvait m'aider.

  3. #3
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 303
    Billets dans le blog
    2
    Par défaut
    [edit] erf, j'avais pas vu un truc, j'ai écris des bêtises. Je réfléchi [/edit]

  4. #4
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 303
    Billets dans le blog
    2
    Par défaut
    As-tu vérifié que l'exécution passe bien par le DataExchange de la FormView? (avec un break point)

  5. #5
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Merci pour ta réponse

    Oui, et justement, il n'y passe pas, j'avais oublié de le signaler ...
    Comment se fait-ce ? N'est-ce pas automatique au démarrage ? Comme dans ma dialogobox en fait ?
    Ou alors j'ai vraiment rien compris du tout à la vie ...

  6. #6
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 303
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jacklafrip
    Oui, et justement, il n'y passe pas, j'avais oublié de le signaler ...
    Comment se fait-ce ? N'est-ce pas automatique au démarrage ? Comme dans ma dialogobox en fait ?
    Ou alors j'ai vraiment rien compris du tout à la vie ...
    En fait, la création d'une CView (CFormView) est différente de celle d'une CDialog. Pour la fromview, il faut intercepter le HandleInitDialog et ne pas oublier de le rediriger vers la classe mère. Dans ton cas, cela devrait ressembler à quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // CMasque_Form_View.h
    [...]
    afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM);
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // CMasque_Form_View.cpp
    [...]
    LRESULT CMasque_Form_View::HandleInitDialog(WPARAM wParam, LPARAM lParam)
    {
       LRESULT lr = BaseClass::HandleInitDialog(wParam, lParam); //remplacer BaseClass par la class dont hérite ta propre classe
       // tes initialisations ici
     
       return lr;
    }
    Hope it helps.

  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
    Pour une view c'est OnInitialUpdate qui est appelée.
    Que contient cette fonction dans ta classe?
    cette vue est bien déclarée dans un document template (initInstance)?
    et donc ouverte par un OpenDocumentFile ?

    Ps:mauvais titre ,ça m'etonnerait que ce soit le richedit le probleme

  8. #8
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 303
    Billets dans le blog
    2
    Par défaut
    Salut farscape,

    je viens de vérifier dans le AFXEXT.H (MFC) qui décrit la classe CFOrmView, et j'y ai trouvé les deux méthodes: OnInitialUpdate() et HandleInitDialog().
    Sais-tu quelles sont les différences entre les deux? Parce que jusqu'à présent, je n'utilise que HandleInitDialog...

  9. #9
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Merci à tous les deux.

    r0d : J'ai essayé ton code, mais ça n'a pas l'air de marcher. Je n'ai toujours pas l'affichage de mes textes...

    farscape :
    1°) Cette vue est bien appelée dans un template, et est appelée dans l'InitInstance par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	if (compte.type_test == 0){
    		CSingleDocTemplate* pDocTemplate;
    		pDocTemplate = new CSingleDocTemplate(
    			IDR_MAINFRAME,
    			RUNTIME_CLASS(CInterfaceDoc),
    			RUNTIME_CLASS(CMainFrame),       // fenêtre frame SDI principale
    			RUNTIME_CLASS(CMasque_Form_View));
    		if (!pDocTemplate)
    			return FALSE;
    		AddDocTemplate(pDocTemplate);
    2°) Voici le code de mon OnInitialUpdate() :
    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
    30
    31
    32
    33
    34
    35
    36
     
    void CMasque_Form_View::OnInitialUpdate(){	
    	// Determine the rectangle for the control
    	CRect rect;
    	GetDlgItem(IDC_GRAPH)->GetWindowRect(rect) ;
    	ScreenToClient(rect) ;
     
    	// create the control
    	m_OScopeCtrl.Create(WS_VISIBLE | WS_CHILD, rect, this) ;
     
    	// customize the control
     
    	xRange=30.0;
    	m_OScopeCtrl.SetRange(0, xRange, 1) ;
    	m_OScopeCtrl.SetYUnits("mBar") ;
    	m_OScopeCtrl.SetXUnits("Temps : 20ms") ;
    	m_OScopeCtrl.SetBackgroundColor(RGB(0, 0, 64)) ;
    	m_OScopeCtrl.SetGridColor(RGB(192, 192, 255)) ;
    	m_OScopeCtrl.SetPlotColor(RGB(255, 255, 255)) ;
     
    	// reglages Port Serie.
        m_Com.PortOpen(1,19200,'N',8,1);
    	m_Com.SetCommMask(EV_RXCHAR); 
        m_Com.UseRtsCts();
        m_Com.StartThread(this);
     
    	m_CReference = compte.reference;
    	m_CIdentif = compte.identifiant;
    	if (compte.type_test == 0)
    		m_CType_Test = "Masque";
    	if (compte.type_test == 1)
    		m_CType_Test = "Soupape tarée";
    	if (compte.type_test == 2)
    		m_CType_Test = "Détendeur";
     
    }
    Les Oscope... permettent l'affichage sur un bouton d'un graphique
    Les m_Com permettent le dialogue avec un autre PC par communication série

    Le problème vient certainement du fait, comme le précisait r0d, que la fonction DoDataExchange() n'est jamais appelée...

  10. #10
    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
    j'en etais sur tu as viré l'appel de la fonction dans la classe de base ...
    CFormView::OnInitialUdate(). (a mettre en premiere ligne).

    du coup UpdateData(FALSE) n'est pas appelé et donc les controles ne sont pas initialisés...
    voir faq : UpdateData...

  11. #11
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Merci Farscape, mais la première ligne de quoi ?

    De CInterfaceApp::InitInstance(), qui met en branle tout le système ?
    Ou dans la première ligne du if ?
    Ou dans la première ligne d'autre chose ?
    Le problème, c'est que la Masque_Form_View n'a alors pas encore de nom, donc j'ai un problème de fonction static ...

    Surtout, ce que je ne comprend pas, c'est que avant ceci, j'ai un appel de DialogBox qui marche très bien ...

  12. #12
    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
    non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void CMasque_Form_View::OnInitialUpdate(){	
    CFormView::OnInitialUpdate();
    //.................

  13. #13
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Merci beaucoup, toujours aussi exceptionnel, rapide et précis
    A plus tard pour de nouvelles aventures

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. determiner les ligne visible ds un RichEdit
    Par hhfr dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2002, 18h15
  2. Enregistrer un RichEdit dans un .Txt
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/08/2002, 11h52

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