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 prob de prog bitmap-OnDraw-Document


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut MFC prob de prog bitmap-OnDraw-Document
    Bonjour,

    je suis un nul en VC++,
    j'ai une fonction qui me genere un bitmap bit;
    j'ai une autre fonction OnDraw(CDC* pDC) avec bitblt qui permet l affichage dun bitmap;
    Comment je fais le lien entre les 2?

    il me semble que pour cela je devrais passer par un document... puisque VS2005 me genere un document pour ma CFormView.

    Comment ca s'utilise ?

    C'est quoi exactement ces fameux CDC, pDC, dc. .....?
    comment j envoie mon bitmap depuis une fonction "banal" vers le document?
    comment je recupere ce bitmap dans ma fonction OnDraw?

    Si vous avez des progs ou des tuts a ce sujet ca me ferai plaisir.

    tchao

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Pour où mettre le bitmap, ça dépend: Est-ce que le document en a vraiment besoin ou est-ce que le bitmap est seulement généré à partir du document, mais seulement nécessaire pour la view ?

    Ensuite, les CDC et compagnie, ce sont les classes permettant de dessiner "dedans", l'équivalent des Graphics de Java ou .Net.

    Mais pour ce qui est d'"envoyer" ou "récupérer" le bitmap, ben je ne vois pas où est le problème... C'est la même chose que pour n'importe quoi d'autre...
    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.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    En faite ma première fonction est une fonction d'acquisition récupérant une image vidéo issue d'une camera sous forme de tableau de donnée.
    après un traitement et une transformation de l image en bitmap. j'ai ensuite essayer de réaliser l affichage d affiler dans la fonction fonction d acquisition
    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
     
      HWND hW = AfxGetMainWnd()->GetSafeHwnd( );
      CPaintDC hdc(CWnd::FromHandle(hW));
      HBITMAP bit;
      BITMAP bitmap;
      bit= CreateBitmap(704,506,3,24,RGBfram);
      RECT rect;
     
      theApp.m_pMainWnd->GetClientRect(&rect);
     
      GetObject(bit,sizeof(BITMAP), &bitmap);
      int surf_width= bitmap.bmWidth;
      int surf_height= bitmap.bmHeight;
      HDC bit_dc= CreateCompatibleDC(hdc);
      SelectObject(bit_dc,bit);
      BitBlt(hdc,0,0, surf_width,surf_height, bit_dc,0,0,SRCCOPY);
      return;
    VS++ a fait une crampe des la seconde ligne. J'ai donc créé une fonction OnDraw ou je fais la quasiment la même chose mais avec StretchBlt.

    Question: ma fonction OnDraw est capable d afficher un bitmap a partir d un doc, comment je fais pour envoyer ma bitmap vers le document a partir de ma fonction d affichage.

    remarque mes fonction sont dans la même view

    merci
    la prochaine fois pense a mettre la balise code, Merci Farscape

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    En fait, pour moi ta fonction d'acquisition devrait être appelée depuis le doc lui-même (qui ferait un UpdateAllViews() ensuite)

    Et ensuite, ta View devrait récupérer le bitmap dans son OnDraw() ou OnUpdate(), et le dessiner dans le OnDraw()...
    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.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Enfaite ma fonction d acquisition est appelle sur pression d un Button.

    Je ne sais pas si je peux faire de lien direct entre ma fonction Acqu et OnDraw.

    Je cherche a passe par un document mais je trouve pas d exemple de code et de syntaxe.
    Je me suis dis qu il fallait que je passe par un doc lorsque j ai vu des exemple de fonction OnDraw qui en lissait un mais cote doc j arrive pas a trouver de source

    Est que quelqun a un code d exemple d echange de donnee entre un CAppDoc.cpp et un CAppView.

    Je travaille en SDI sur VC++ 2005

    Please help me

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Citation Envoyé par PePedu78 Voir le message
    Enfaite ma fonction d acquisition est appelle sur pression d un Button.
    Ça n'empêche pas de déplacer l'appel vers le document. Il suffit que ta view appelle GetDocument()->Acquisition() quand tu cliques le boutons...
    Je ne sais pas si je peux faire de lien direct entre ma fonction Acqu et OnDraw.
    Tu n'es pas censé le faire.

    Je cherche a passe par un document mais je trouve pas d exemple de code et de syntaxe.
    Je me suis dis qu il fallait que je passe par un doc lorsque j ai vu des exemple de fonction OnDraw qui en lissait un mais cote doc j arrive pas a trouver de source

    Est que quelqun a un code d exemple d echange de donnee entre un CAppDoc.cpp et un CAppView.

    Je travaille en SDI sur VC++ 2005

    Please help me
    Y'a rien de compliqué à savoir:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CAppView::FaireUnTruc()
    {
    	GetDocument()->FaireUnAutreTruc();
    }
     
    //Et dans ta classe de document:
    void CAppDoc::FaireUnAutreTruc()
    {
    	FaireQuelqueChose();
    	UpdateAllViews();
    }
    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.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Merci pour ces reponses rapide Medinoc.

    Cela dit comme je l ai precise au debut de mon message je suis un debutant en VC++ et un boulet en language objet.

    j arrive pas a implemter comme tu me le dit et c est surment a cause de mon manque de connaissance en la matiere

    voila le detail du code j'ai

    void CProject3View::OnBnClickedButton1()
    {
    //bla initialisation de fonction en dynamique

    // appelle de la fonction acquisition (fonction callback venant dune dll appel en dynamique)

    m_xSetVidCapFt(VideoCaptureFct);

    //si je fais GetDocument->m_xSetVidCapFt(VideoCaptureFct);
    //j obtient error m_xSetVidCapFt not member of Cproject3Doc

    }


    fonction acquisition dans Cproject3View

    void VideoCaptureFct(...param...)
    {

    // bla traitement
    HBITMAP bit;
    bit= CreateBitmap(704,506,3,24,RGBfram);

    }

    fonction affichage qui doit recuperer le bitmap bit de la fonction precedante

    void CProject3View::OnDraw(CDC* pDC)
    {
    CProject3Doc* pDoc=GetDocument();
    ASSERT_VALID(pDC);
    CPaintDC hdc(this);
    BITMAP bitmap;
    RECT rect;

    theApp.m_pMainWnd->GetClientRect(&rect);

    GetObject(bit,sizeof(BITMAP), &bitmap);
    int surf_width= bitmap.bmWidth;
    int surf_height= bitmap.bmHeight;
    HDC bit_dc= CreateCompatibleDC(hdc);
    SelectObject(bit_dc,bit);
    BitBlt(hdc,0,0, surf_width,surf_height, bit_dc,0,0,SRCCOPY);
    return;
    }


    dans CProject3Doc j ai en gros rien

    BOOL CProject3Doc::OnNewDocument()
    {
    if (!CDocument::OnNewDocument())
    return FALSE;

    // TODO : ajoutez ici le code de réinitialisation
    // (les documents SDI réutiliseront ce document)

    return TRUE;
    }


    // sérialisation de CProject3Doc

    void CProject3Doc::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())
    {
    // TODO : ajoutez ici le code de stockage
    }
    else
    {
    // TODO : ajoutez ici le code de chargement
    }
    }



    Vraiment je suis pome j sais pas comment faire pour que ma bitmap soit afficher. Est que quelqun a un exemple de code?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Si tu débutes en C++, je te conseille de mettre ça en pause.

    Commence par apprendre comlpètement le vrai C++ standard, les bonnes pratiques en C++, fais des exercices corrigés, puis attaque-toi aux MFC.

    Et commence par les tutoriaux.
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2008, 20h46
  2. MFC SDI "La création d'un document vide a echoué"
    Par kinhelios dans le forum MFC
    Réponses: 14
    Dernier message: 17/03/2008, 11h48
  3. [MFC] - Prob. Timer
    Par Alice9 dans le forum MFC
    Réponses: 9
    Dernier message: 18/08/2005, 15h17
  4. [MFC] Lancer l'ouverture d'un document
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 29/04/2005, 17h12
  5. Réponses: 2
    Dernier message: 20/01/2004, 14h27

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