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 :

[MFC] OnPaint OnDraw CView


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut [MFC] OnPaint OnDraw CView
    Bonjour,

    J'ai une application derive d'une CView dans laquelle je cree 3 CStatic dans la fonction OnInitialUpdate( Les CStatics en question sont declarés en tant que membre de la classe : CStatic* pLabel1, ...).

    Ils s'affichent correctement à l'ecran par contre quand je fais un apercu avant impression y'a rien.Apres quelques recherches cela vient du fait que pour que ca se voit il faudrait remplir la fonction OnDraw.


    Comment faire pour que l'aperçu avant impression fonctionne avec mes trois labels ?

  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
    Par défaut
    salut,
    tu viens de donner la reponse :
    l'affichage dans une view doit se faire dans OnDraw .
    voir ce post dans la faq:
    http://c.developpez.com/faq/vc/?page...HowToPrintView

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par farscape
    salut,
    tu viens de donner la reponse :
    l'affichage dans une view doit se faire dans OnDraw .
    voir ce post dans la faq:
    http://c.developpez.com/faq/vc/?page...HowToPrintView
    Oui mais comment je fais ?
    Si je declare une CStatic dans mon OnDraw il va le redeclarer a chaque appel de OnDraw.

    En clair :

    J'ai ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CPersoGraphiqueView::OnDraw(CDC* pDC)
    {
    	CPersoGraphiqueDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
     
     
    }

    cette fonction s'attend a ce que je dessine des trucs alors que moi mon Cstatic il se dessine tout seul. Comment je passe à au DC du OwnDraw le DC de mon CStatic ?
    Dois je utiliser des controles owner-drawn ?

  4. #4
    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 ce genre de travail :
    les controles sont initialisées dans OninitialUpdate.
    probleme lors de l'impression tu n'auras rien ,puisque le dessin dans une view se fait dans OnDraw et que le controle est independant.
    il faut donc dessiner le controle comme ça se fait dans un grid :
    en mode edition sur un combobox (par exemple) le controle est instancié
    apres il est dessiné .
    il serait dont judicieux de faire une petite classe de dessin pour static etc..
    une fonction est utile pour les controles CDC:rawFrameControl
    mais pas pour les statics...


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par farscape
    pour ce genre de travail :
    les controles sont initialisées dans OninitialUpdate.
    probleme lors de l'impression tu n'auras rien ,puisque le dessin dans une view se fait dans OnDraw et que le controle est independant.
    il faut donc dessiner le controle comme ça se fait dans un grid :
    en mode edition sur un combobox (par exemple) le controle est instancié
    apres il est dessiné .
    il serait dont judicieux de faire une petite classe de dessin pour static etc..
    une fonction est utile pour les controles CDC:rawFrameControl
    mais pas pour les statics...


    Tu(pardon de te tutoyer) veux dire que je dois m'amuser à redessiner tous mes controles ?
    Je suis pas sur de comprendre, c'est quoi le mode edition, c'est quoi un grid et pourquoi 42 ?

  6. #6
    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
    re,
    la reponse est oui ,et si tu nous disais ce que tu cherches a faire ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par farscape
    re,
    la reponse est oui ,et si tu nous disais ce que tu cherches a faire ?
    Va a l'adresse indiquée ci-dessous et telecharges l'executable (c'est pas un virus)
    en gros j'ai reimplementé un editeur de controles.
    Je definis dynamiquement mes controles et leurs proprietes et je sauvegarde ensuite dans un fichier XML.
    Mon objectif etait de pouvoir imprimer le design courant.

    C'est pas tres clair donc essaye mon appli et tu vascomprendre tout de suite :

    http://richom.v.free.fr/PersoGraphique.exe

    Ensuite va dans Affichage->Screen Designer et la si tu cliques
    sur le fond une toolbar va apparaitre.
    Ensuite ajoute un label(icone Aa), la toolbar fonctionne en Drag N drop, tu cliques sur l'icone et tu la deplaces a l'interieur de la fenetre.

    PS : pour voir la mise a jour des propriétes tu dois deselectionner le controle en cours et recliquer dessus.
    J'ai aussi un bug appermment pour le chargement d'images.
    Ca marchait ce matin mais la il faut reessayer plusieurs fois pour que ca fonctionne.



    Ensuite une fois fini tu retournes dans Affichage->Screen Designer et ca te cree un joli fichier XML avec une description des objets et leurs propriétes.
    En gros j'ai reimplémenté en MFC certaines fonctionnalités de wxwidgets (possibilité de definir les ressources dans un fichier XML).
    Meme au niveau du code ca simplifie la vie, en gros si mon objet s'appelle ID_STATIC_1002 je peux faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CTestView::OnInitialUpdate() 
    {
    CXuiWnd<CView>::OnInitialUpdate();
    CxStatic* pLabel = XUICTRL(*this, "ID_STATIC_1002", CxStatic);
    pLabel->SetWindowText("....");
    }
    Mais bon je m'éloigne de mon problème donc en fait ce n'est pas possible d'imprimer le design ?
    C'est ton dernier mot ?
    Je pense que ca doit etre possible en trichant.
    En gros si je fais une sorte de capture ecran et que j'envoie ca à l'imprimante, ca peut le faire non ?

  8. #8
    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
    oui c'est possible a condition que toute ta surface soit visible a l'ecran .
    a ce moment la voir faq:
    http://c.developpez.com/faq/vc/?page...PrintDialgoBox

    en adaptant a la view ça fonctionne.


  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
    Par défaut
    j'en conclus que tu as imprimé la view a partir d'un bitmap ?,
    tu t'en tire bien

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/11/2005, 18h30
  2. [MFC] Glisser/Déposer dans une CView
    Par octopus984 dans le forum MFC
    Réponses: 2
    Dernier message: 26/04/2005, 10h15
  3. Réponses: 5
    Dernier message: 25/03/2005, 16h19
  4. [MFC] différence entre CView et CDialog?
    Par r0d dans le forum MFC
    Réponses: 3
    Dernier message: 22/02/2005, 16h23
  5. Réponses: 13
    Dernier message: 02/02/2005, 00h21

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