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 :

Image de fond dans API sous Visual C++


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par d�faut Image de fond dans API sous Visual C++
    Salut.
    j'ai d�velopp� une application sous visual C++ mais je n'arrive pas � afficher une image en fond d'�cran.
    Ma fonction est :

    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 CMainFrame::ImageFond(CDC* pDC) 
    { 
    CBitmap bmp; 
    CBitmap *ptrBmpOld; 
    CDC dcMemory; 
    BITMAP bm; 
    CRect rect; 
     
    Invalidate(TRUE); 
    bmp.LoadBitmap(IDB_IMAGE_LARGE); 
    bmp.GetBitmap(&bm); 
    GetClientRect(rect); 
    dcMemory.CreateCompatibleDC(pDC); 
    ptrBmpOld=dcMemory.SelectObject(&bmp); 
    pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMemory,0,0,(bm.bmWidth),(bm.bmHeight), SRCCOPY ); 
    dcMemory.SelectObject(ptrBmpOld); 
    }
    et cette fonction est appell�e dans

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    BOOL CMainFrame::OnEraseBkgnd(CDC* pDC) 
    { 
    ImageFond(pDC); 
    return TRUE; 
    }
    Mon image s'affiche mais couvre la barre des taches ainsi que les autres fenetres . Et lorsque je d�place la fenetre d'application mon image disparait .
    Je n'arrive pas � voir d'o� cela vient.
    Y aurait il d'autres param�tres � r�gler dans mon application pour avoir une jolie image en font d'�cran ?
    Merci pour votre aide
    A+

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    salut, tu peux t'appuyer sur cet exemple dans la faq http://c.developpez.com/faq/vc/?page...gndBitmapOnDlg

  3. #3
    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,
    pluisieurs remarques:
    pas de Invalidate dans le message WM_ERASEBKGND .(ton pb doit venir de la).
    recharger l'image dans le message fait perdre du temps.

  4. #4
    mat.M
    Invit�(e)
    Par d�faut
    Il vaut mieux utiliser CWnd::OnPaint plutot que CWnd::OnEraseBkgnd c'est beaucoup plus appropri� pour dessiner et afficher graphismes.
    CWnd::OnEraseBkgnd sert � redessiner le fond d'une fen�tre pas forc�ment � g�rer des graphismes.
    Pour appeler OnPaint , appeler avec Invalidate


    CWnd::OnEraseBkgnd
    afx_msg BOOL OnEraseBkgnd( CDC* pDC );

    Return Value

    Nonzero if it erases the background; otherwise 0.

    Parameters

    pDC

    Specifies the device-context object.

    Remarks

    The framework calls this member function when the CWnd object background needs erasing (for example, when resized). It is called to prepare an invalidated region for painting.

    CWnd::OnPaint
    afx_msg void OnPaint( );

    Remarks

    The framework calls this member function when Windows or an application makes a request to repaint a portion of an application�s window. TheWM_PAINT message is sent when the UpdateWindow or RedrawWindow member function is called.

    A window may receive internal paint messages as a result of calling the RedrawWindow member function with the RDW_INTERNALPAINT flag set. In this case, the window may not have an update region. An application should call the GetUpdateRect member function to determine whether the window has an update region. If GetUpdateRect returns 0, the application should not call the BeginPaint and EndPaint member functions.
    En programmation win32 normalement on "peint" une fen�tre avec BeginPaint et EndPaint qui retournent une PAINTSTRUCT et un HDC

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par d�faut
    Salut,

    Merci pour vos conseils mais malheureusement cela n'a pas march�.
    En utilisant OnPaint, j'ai le m�me ph�nom�ne :
    Mon image couvre les autres fen�tres et la barre des taches ne s'affiche pas.
    Si je bouge la fen�tre, mes autres fen�tres s'affichent ainsi que la barre des taches mais mon image dispara�t laissant place � un fond d'�cran d'origine (gris).
    Si je retire de ma fonction mon image ne fait qu'appara�tre furtivement.
    Je pense que mon image reste en premier plan au lieu de se trouver derri�re puis elle est effac�e lors du rafra�chissement.
    Y aurait'il des param�tres � configurer lors de la cr�ation de ma fen�tre ?
    Merci encore,
    A+
    Lolo

  6. #6
    mat.M
    Invit�(e)
    Par d�faut
    Autant pour moi j'avais mal lu ; il vaut mieux utiliser OnEraseBkGnd plutot que OnPaint pour repeindre le fond de l'application .
    Essayer avec LockWindowUpdate() avant de dessiner � tout hasard

  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
    Par d�faut
    la methode sur OnEraseBkgnd fonctionne je l'utilise .
    enleve le invalidate dedans.
    exemple dans la faq sur une dialog:
    http://c.developpez.com/faq/vc/?page...gndBitmapOnDlg
    (c'est le meme principe).

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par d�faut

    Merci, les gars pour le coup de main cela m�a bien aid�.
    J�ai presque r�ussi.
    Mon image ne dispara�t plus mais elle remplie aussi les autres fen�tres que j�ouvre dans mon appli cachant ainsi les boutons.
    Voici ma nouvelle fonction :

    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
    BOOL CMainFrame::OnEraseBkgnd(CDC* pDC) 
    {
    // Efface les fonds d’écran des fenêtres, si on enlève cette fonct les contours //disparaisse sous l’image de fond
    Invalidate(TRUE);
     
    // Ma fonction qui affiche l’image
    ImageFond(pDC);
     
    // Pour redessiner ma barre des taches
    m_wndToolBar.UpdateWindow();
     
    /////////////////////////////////////////////////////////////////////////////////////
    //  Pour rafraîchir mes fenêtres et ainsi avoir les affichages
    /////////////////////////////////////////////////////////////////////////////////// /
     
    POSITION temp,doc;
    CDocTemplate* pDocTemplate;
    CDocument* pDocument;
     
    temp = theApp.GetFirstDocTemplatePosition( );
    while( temp != NULL )
    {	
         pDocTemplate = theApp.GetNextDocTemplate( temp );
         doc = pDocTemplate->GetFirstDocPosition( );
         while( doc != NULL )
        {
    	pDocument = pDocTemplate->GetNextDoc( doc );
    	pDocument->UpdateAllViews( NULL, 0, NULL );
    	theApp.UpdateAllDocuments();
         }
    }
     
    // Pour garder mon image en fond d’écran, si je la place avant ma
    // fonction ImageFond je n’ai qu’un écran blanc et mon image n’apparaît
    // pas.
          LockWindowUpdate();
     
          return TRUE;
    }
    Encore merci
    A+

Discussions similaires

  1. R�ponses: 6
    Dernier message: 21/09/2006, 17h33
  2. R�ponses: 5
    Dernier message: 27/09/2005, 09h18
  3. image de fond dans treeview
    Par chancourt dans le forum Composants VCL
    R�ponses: 4
    Dernier message: 17/08/2005, 16h11
  4. Etirer une image de fond dans une cellule
    Par dreamanoir dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 2
    Dernier message: 13/07/2005, 14h39
  5. R�ponses: 4
    Dernier message: 03/05/2005, 09h03

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