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 :

RichEdit impossible dans le CDialog fille d'un TabCtrl


Sujet :

MFC

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut RichEdit impossible dans le CDialog fille d'un TabCtrl
    Slt,

    je voudrai mettre un "Rich Edit 2.0 Control" dans un fiche qui est appelé dans un TabCtrl, seulement, quand je compile, ca plante, je le remplace par un CEdit multiligne, c'est ok, je le remet ca replante

    j'ai vraiment besoin d'appliquer differentes font a un texte d'ou le rich edit,

    y a t il kk chose de particulier à faire pour pouvoir le mettre ?

    merci

  2. #2
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    oui ,initialiser les richedit dans initInstance en rajoutant :AfxInitRichEdit( );


  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    bizarre ca, ok merci, jvais voir ca

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    jvois pas comment appeler celle de base dedans,

    je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BOOL DlValidationPage2::InitInstance()
    {
    	CWinApp::InitInstance();
     
    	AfxInitRichEdit( ); 
     
    	return FALSE;
    }
    il me dit :
    DlValidationPage2.cpp(38) : error C2352: 'CWinApp::InitInstance' : illegal call of non-static member function
    pourtant jle trouve tel quel dans pas mal d'exemple sur le net

  5. #5
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    heu ,InitInstance c'est dans la classe d'application du projet ...
    celle qui est genérée et heritée de CWinApp,pas dans la dialogue ....

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ben quand jmet AfxInitRichEdit( ); dans la classe de base, ca plante comme si de rien etait.

    quand je cree dynamiquement la CDialog qui contient la TabCtrl qui appelle la fiche qui contient le richedit, ca plante

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    c'est quoi la classe de base pour toi ?
    donne moi le nom de sa classe parent ...

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ben pa premiere cdialog qui s'ouvre s'appelle DlAccueil, apres dans son code, j'ai :
    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
    void CDlAccueil::RunScanBarCode(CString m_sUserChoice)
    {
    	if (m_sUserChoice != "")
    	{
    		DlValidation *validation = new DlValidation();
     
    		validation->SetIDRepresentation(PATH_APPS, GetIDFromString(m_sUserChoice));
     
    		this->ShowWindow(SW_HIDE);
     
    		validation->DoModal();
     
    		this->ShowWindow(SW_SHOW);
     
    		delete validation;
    	}
    }
    ou DlValidation est la CDialog qui contient le TabCtrl et dont le code comprend :
    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
    BOOL DlValidation::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	SetSameWindowPosition(GetParent(), this);
     
    	// Onglet : Douchette
    	Page1 = new DlValidationPage1;
    	Page1->Create(DlValidationPage1::IDD, &TabCtrl);
    	TabCtrl.AddTab(Page1, "Douchette", 0);
     
    	// Onglet : Saisie manuelle
    	Page2 = new DlValidationPage2;
     
    		// Chargement du fichier
    		p_cslFile.LoadFromFile(p_sPath);
    		Page2->SetModel(p_cslFile.GetItem(2));
    		for(int i = 3; i < p_cslFile.Count(); i++)  Page2->AddString(p_cslFile.GetItem(i));
     
    	Page2->Create(DlValidationPage2::IDD, &TabCtrl);
    	TabCtrl.AddTab(Page2, "Saisie manuelle", 0);
     
    	TabCtrl.SetAutoSizePannel();
     
    	return TRUE;
    }

  9. #9
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    aiaaaille ,
    je m'en doutais un peu ,
    tu debutes certes mais il faut me lire un peu mieux que ça ....
    Citation Envoyé par farscape
    heu ,InitInstance c'est dans la classe d'application du projet ...
    celle qui est genérée et heritée de CWinApp,pas dans la dialogue ....
    tu cherches dans ton projet la seule classe qui herite de CWinApp.
    dedans tu trouveras la fonction InitInstance .
    et pour punition tu liras mon tuto sur les MFC ou c'est expliqué ....
    http://farscape.developpez.com/tutor...arrer-mfc-vc6/

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ben, au début, je l'ai mis comme ca :

    class CDigiApp : public CWinApp
    {
    public:
    CDigitickApp();

    // Substitutions
    public:
    virtual BOOL InitInstance();

    // Implémentation

    DECLARE_MESSAGE_MAP()
    };
    ici :
    BOOL CDigiApp::InitInstance()
    {
    // InitCommonControls() est requis sur Windows XP si le manifeste de l'application
    // spécifie l'utilisation de ComCtl32.dll version 6 ou ultérieure pour activer les
    // styles visuels. Dans le cas contraire, la création de fenêtres échouera.
    InitCommonControls();

    CWinApp::InitInstance();

    AfxEnableControlContainer();
    d'ailleur, il y est toujours, mais ca plante quand meme

    jvais lire ton tuto...

    merci en tout cas de ta patience

  11. #11
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    dans un projet vs 2005 j'ai fais ça :
    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
     
    OOL CessairicheditApp::InitInstance()
    {
    	// InitCommonControlsEx() est requis sur Windows XP si le manifeste de l'application
    	// spécifie l'utilisation de ComCtl32.dll version 6 ou ultérieure pour activer les
    	// styles visuels.  Dans le cas contraire, la création de fenêtres échouera.
    	INITCOMMONCONTROLSEX InitCtrls;
    	InitCtrls.dwSize = sizeof(InitCtrls);
    	// À définir pour inclure toutes les classes de contrôles communs à utiliser
    	// dans votre application.
    	InitCtrls.dwICC = ICC_WIN95_CLASSES;
    	InitCommonControlsEx(&InitCtrls);
     
    	CWinApp::InitInstance();
     
    	AfxEnableControlContainer();
    	AfxInitRichEdit();
    (derniere ligne).
    sinon a cause de la simple presence du richedit le programme ne s'execute pas .....

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ca plante aussi avec ca...

    nb : jsuis dans ton pdf ....

  13. #13
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    ou ça plante :on peut voir le code de l'assertion ?
    le AfxInitRichEdit(); doit etre quand meme present a l'endroit indiqué.

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ben si je met un richedit sur la CDialog principale,
    le prog se lance mais s'arrete aussi sec sans erreur,

    si par contre, je le met sur la CDialog qui est appelé dynamiquement dans le CtrlTab, ca plante au moment ou j'appelle la fiche comprenant le CDialog:
    Program: ... documents\Visual Studio Projects\Digi\Debug\Digi.exe
    File: winocc.cpp
    Line: 319

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    decidement, jvois pas ....

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Regarde avec le debugger où a lieu exactement l'assertion qui foire, et remonte le long de la "call stack" pour voir exactement quel appel fait planter quoi...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    Ha Ha Ha Ha Ha!

    nb : j'ai commencé sous Visual C .Net il y a 15 jours .....

    j'en suis pas la pour preuve le nombre de message que je laisse sur ce forum depuis 15 jours

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est simple: tu lances le programmes avec F5, (au lieu de ctrl-F5) et tu as le debugger qui s'affiche.

    Quand ça plante, tu choisis de débugguer le programme, et parmi toutes les informations du debugger, tu as une liste déroulante appelée "call stack" ou "call frame" (je ne sais plus).

    Là, tu peux remonter les appels pour savoir exactement quelle fonction a appelé la fonction qui a appelé l'assertion qui échoue...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    bien joué ....

    si ce n'est que les raccourcis step / step sont F10 (out) et F11 (in)

    du coup, j'ai pu capter ma betise

    j'avais mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AfxEnableControlContainer();
    	AfxInitRichEdit();
    juste avant dans InitInstance()

    alors qu'il faut le mettre avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INT_PTR nResponse = dlg.DoModal();
    logique quoi

    ca marche maintenant ces satanés rich edit

    ya plus qu'à trouver comment les utiliser jfile à la faq

    merci à tous

  20. #20
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par firejocker
    bien joué ....

    si ce n'est que les raccourcis step / step sont F10 (out) et F11 (in)

    du coup, j'ai pu capter ma betise

    j'avais mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AfxEnableControlContainer();
    	AfxInitRichEdit();
    juste avant dans InitInstance()

    alors qu'il faut le mettre avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INT_PTR nResponse = dlg.DoModal();
    logique quoi

    ca marche maintenant ces satanés rich edit

    ya plus qu'à trouver comment les utiliser jfile à la faq

    merci à tous
    ooooooh puré ça mérite des
    farscape -> -> firejocker

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2005, 18h29
  2. probleme de virtual dans la classe fille
    Par xtaze dans le forum C++
    Réponses: 23
    Dernier message: 26/04/2005, 21h39
  3. Ecrire du texte dans les fenetres filles (MDI)
    Par trilomdor dans le forum MFC
    Réponses: 9
    Dernier message: 23/06/2004, 17h00
  4. Réponses: 2
    Dernier message: 17/02/2004, 23h27
  5. Réponses: 3
    Dernier message: 28/01/2004, 14h55

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