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 :

Problème avec BitBlt


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 2
    Par défaut [Résolu] Problème avec BitBlt
    Bonjour, j'utilise Bitblt pour afficher des trucs que je dessine préalablement en mémoire et le problème c'est que ça m'affiche un gros rectangle noir à chaque fois.
    Voila le code que j'utilise;

    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
     
    CClientDC ClientDC(this);
    CRect rc;
    CDC* pDCMem;
    CBitmap bmp;
    CBitmap* pOldBmp;
     
    GetClientRect(rc);
     
     
    pDCMem=new CDC;
    pDCMem->CreateCompatibleDC(&ClientDC);
    bmp.CreateCompatibleBitmap(&ClientDC,rc.Width(),rc.Height());
    pOldBmp=pDCMem->SelectObject(&bmp);
     
     ...
     
     (Instructions de dessin dans pDCMem)
     
     ...
     
    ClientDC.BitBlt(0,0,rc.Width(),rc.Height(),pDCMem,0,0,SRCCOPY);
     
    pDCMem->SelectObject(pOldBmp);
    delete pDCMem;
    Merci d'avance de votre aide

  2. #2
    mat.M
    Invité(e)
    Par défaut
    l'explication viendrait du fait que dcMem n'est pas effacé à l'initialisation .
    Donc par exemple dessiner un rectangle blanc ou bien charger la bitmap dans le dc en mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CRect rect;
    GetClientRect(&rect);
    dcMem->Rectangle (rect);
    Sinon voilà l'exemple du MSDN
    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
    37
    38
    39
    40
    41
    42
     
    // Create a normal DC and a memory DC for the entire screen. The 
    // normal DC provides a "snapshot" of the screen contents. The 
    // memory DC keeps a copy of this "snapshot" in the associated 
    // bitmap. 
     
    hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); 
    hdcCompatible = CreateCompatibleDC(hdcScreen); 
     
    // Create a compatible bitmap for hdcScreen. 
     
    hbmScreen = CreateCompatibleBitmap(hdcScreen, 
                         GetDeviceCaps(hdcScreen, HORZRES), 
                         GetDeviceCaps(hdcScreen, VERTRES)); 
     
    if (hbmScreen == 0) 
        errhandler("hbmScreen", hwnd); 
     
    // Select the bitmaps into the compatible DC. 
     
    if (!SelectObject(hdcCompatible, hbmScreen)) 
        errhandler("Compatible Bitmap Selection", hwnd); 
     
            // Hide the application window. 
     
            ShowWindow(hwnd, SW_HIDE); 
     
             //Copy color data for the entire display into a 
             //bitmap that is selected into a compatible DC. 
     
            if (!BitBlt(hdcCompatible, 
                   0,0, 
                   bmp.bmWidth, bmp.bmHeight, 
                   hdcScreen, 
                   0,0, 
                   SRCCOPY)) 
     
            errhandler("Screen to Compat Blt Failed", hwnd); 
     
            // Redraw the application window. 
     
            ShowWindow(hwnd, SW_SHOW);

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 2
    Par défaut [Résolu]Problème avec BitBlt
    oui c'était bien qqchose dans ce genre, merci

  4. #4
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    je suis bien interessé par une explication un peu plus complete du code.
    je voudrais creer aussi une image tampon pour faire un affichage sans scintillement mais je ne sais pas trop ou mettre l'appel a la fonction memoire.

    j'utilise la fonction OnDraw (en MFC) y a t il une difference flagrande avec OnPaint (mis a part le changement de coordonnées)?

    je suis dans le flou total.


    merci

  5. #5
    mat.M
    Invité(e)
    Par défaut
    j'utilise la fonction OnDraw (en MFC) y a t il une difference flagrande avec OnPaint (mis a part le changement de coordonnées)?
    OnPaint : pour classe de dialogue
    OnDraw : pour classe vue SDI /MDI sinon c'est la même chose dans les deux cas....

    Envoie-moi un e-mail j'avais fait un petit programme de sauvegarde de DC en mémoire il ya quelques temps pour quelqu'un
    martymat_m@yahoo.com

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

Discussions similaires

  1. problème avec paintpicture et bitblt
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 02/09/2005, 23h24
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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