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 :

Affichage en passant par un buffer...


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Affichage en passant par un buffer...
    Je veux afficher des images bmp sur l'écran mais quand il y en a trop avec le rafraichissement, ça saute un peu...
    Je voudrais passer par un buffer dans lequel je mets tout ce que je veux et ensuite j'affiche ce buffer à l'écran...
    Si quelqu'un peut me dire comment faire ça, merci !!!

  2. #2
    Bob
    Bob est déconnecté
    Membre averti
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 378
    Points
    378
    Par défaut image et buffer
    Pour ca, tu dois creer un bitmap avec CreateCompatibleBitmap(). Ensuite tu copie ton contexte d'affichage avec CreateCompatibleDC(). Tu fais SelectObject() pour selectionner ton bitmp dans ton contexte d'affichage nouvellement cree. Ensuite, tu dessins tout ce que tu veux dans ton bitmap et tu l'affiche a l'ecran.
    Bon, c'est tres resume mais c un peu long a faire en fait...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    euh....
    J'ai compris le principe mais justement, le pb, c'est au niveau du code...
    Je vais te mettre ce que j'ai fait et tu me diras ce qui va pas...

    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
    void CMaClasse::Draw(CDC *pDC)
    {
    	CBitmap bitmapbuffer;
    	bitmapbuffer.CreateCompatibleBitmap(&dcMemory, 1000, 750);
    	CDC dcMemory;
    	dcMemory.CreateCompatibleDC(pDC);
    	dcMemory.SelectObject(&bitmapbuffer);
     
    	CBitmap bitmapImage;
    	bitmapImage.LoadBitmap(m_ImageBmp);
    	CDC dc2;
    	dc2.CreateCompatibleDC(pDC);
    	dc2.SelectObject(bitmapImage);
    	dcMemory.BitBlt(10, 10, 100, 100, &dc2, 0, 0, SRCCOPY);
    }
    voilà, je veux afficher une partie d'une image dans l'image que tu m'as dit de créer...
    J'espère que tu sauras m'aider car je débute un peu avec Visual et c'est pas évident dans ces conditions...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    j'oubliais, j'ai fait une erreur qui n'est pas dans mon code d'origine :
    bitmapbuffer.CreateCompatibleBitmap(&dcMemory, 1000, 750);
    est fait après :
    CDC dcMemory;

  5. #5
    vvk
    vvk est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je ne suis pas absolument certain, n'ayant pas fait ce genre de manipulations moi-même, mais il me semble que la création du bitmap mémoire ne doit pas être dans le OnDraw.

    Ce qu'il faut, c'est le déclarer et l'initialiser une fois, pour ensuite le mettre à jour quand tu modifie l'un des éléments à afficher. Dans le OnDraw, tu ne fais qu'afficher le bitmap dans le CDC.

    En tout cas, ce qui est certain, c'est qu'il faut que le code dans un OnDraw soit aussi efficace que possible, donc, il faut éviter toute allocation (comme CreateCompatibleBitmap, CreateCompatibleDC...)

    Ou alors, avoir une section de code dans laquelle on ne passe que lors du premier OnDraw, qui se charge de l'allocation.

  6. #6
    Bob
    Bob est déconnecté
    Membre averti
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 378
    Points
    378
    Par défaut image buffer
    Dans le code que tu as donne, il n'y a aucune erreure. Mais si tu n'arrives pas a dessiner ton image buffer c'est parce qu'il faut detruire les contexte d'affichages que tu as cree avec DeleteDC(). Tu dois appeler cette fonction avant de dessiner ton image buffer.
    J'esperte qu'avec ca caé marchera, sinon envoie moi un plus gros bout de code. Mais par contre, c'est vraim qu'il ne faut pas alouer un bitmap a chaque redessinement de la fenetre. Tu dois faire cette manoeuvre au debut de la creation de la fenetre. A ce moment, tu peux faire un GetDC() pour obtenir le contexte d'affichage pour creer ton bitmap.

    voila, j'espere t'avoir aide

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

Discussions similaires

  1. [WS 2008 R2] Affichage lecteur réseau en passant par les GPOs
    Par yann47550 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 21/10/2011, 12h20
  2. [FLASH MX] Affichage d'images par loadMovie
    Par n_tony dans le forum Flash
    Réponses: 7
    Dernier message: 23/09/2004, 15h34
  3. [MFC] Affichage des Scroll par défaut
    Par Kevgeii dans le forum MFC
    Réponses: 2
    Dernier message: 05/02/2004, 19h44
  4. Copies de flots en passant par les itérateurs
    Par Christophe Brun dans le forum C++
    Réponses: 7
    Dernier message: 02/07/2003, 11h41
  5. [math] equ sinusoide passant par deux points
    Par ddams dans le forum Mathématiques
    Réponses: 11
    Dernier message: 24/05/2003, 14h12

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