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] Débutant : Problème avec OnPaint()


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut [MFC] Débutant : Problème avec OnPaint()
    hello à tous

    j'ai un problème avec OnPaint() de MaClasseFrame héritant de CFrameWnd.
    J'aimerais juste afficher une bitmap sur cette frame (par l'intermediaire de CPicture, http://www.codeproject.com/bitmap/pictureshow.asp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void MaClasseFrame::OnPaint()
    {
    	CPaintDC  dc(this); // device context for painting
     
    	if (m_pExpPicture!=NULL)
    	{
    		m_pExpPicture->Show(&dc);//call to CPicture::Show(CDC *pDC, CRect DrawRect)	
    	}
    }
    Aucune erreur d'execution, mais malheureusement rien ne s'affiche... ai je oublier qqch d'important ?

    PS: j'ai verifier le polymorphisme de CPaintDC -> CDC, pas de problème.
    PS2 : j'ai essayer de rajouter un appel à UpdateWindow() et Invalidate() mais pas de changement...
    PS3 : WM_PAINT est bien linké sur OnPaint()
    Pour les details, cherche tout seul !

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    c'est dans le onEraseBkgnd qu'il faut faire le traitement:
    http://c.developpez.com/faq/vc/?page...gndBitmapOnDlg
    (c'est la même chose).

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    ca change absoluement rien...
    meme problème.
    Pour les details, cherche tout seul !

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    avec le code de la faq:
    tu a chargé l'objet m_Picture ?
    si tu mets un point d'arret en debug dans le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(m_Picture.m_IPicture)   
        {
    tu y passe ?

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut debug
    oui j'y passe sans problème, le test reussi !


    il m'a semblé que mon image est affichée brievement mais est ecrasée par un fond blanc par la suite (<1 ms). Pourtant il me semble qu'aucun code ne repeint le bkgrd par la suite....

    Que dois-je verifier ?
    Pour les details, cherche tout seul !

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    on sait jamais:
    tu as enleve le code dans le onPaint ?


  7. #7
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    oui j'y ai pensé !
    Pour les details, cherche tout seul !

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    montre moi ton code sur le erase background.

  9. #9
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
    {
    	if (m_pExpPicture!=NULL)
    	{		
    		m_pExpPicture->Show(pDC);
    	}
     
    	return CFrameWnd::OnEraseBkgnd(pDC);
    }
    m_pExpPicture est de type CDisplayPicture et est correctement chargé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CDisplayPicture::Show(CDC * _dc)
    {	
    	if(m_IPicture)
    	{		
    		CPicture::Show(_dc,ClientWndRect);
    	}
    }
    Pour les details, cherche tout seul !

  10. #10
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    rahhh tu as mal recopié la faq !
    si l'objet picture est valide il faut faire return FALSE !
    sinon tu t'ecrases ton fond avec la fonction par defaut...


  11. #11
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    j'avais effectivement oublier le return FALSE....merci bcp mais meme apres rajout, le problème reste inchangé. J'y comprend pas grand chose !
    Pour les details, cherche tout seul !

  12. #12
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    ton n'a pas grand chose a voir avec celui que j'ai posté dans la faq....
    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
     
    BOOL CTestsDiversDlg::OnEraseBkgnd(CDC* pDC) 
    {
        // TODO: Add your message handler code here and/or call default
        if(m_Picture.m_IPicture)   
        {
            CRect rect;
            GetClientRect(&rect);
            m_Picture.UpdateSizeOnDC(pDC); // Get Picture Dimentions In Pixels
     
            m_Picture.Show(pDC, CPoint(0,0), CPoint(m_Picture.m_Width,
                            m_Picture.m_Height), 0,0);
            m_Picture.Show(pDC,rect); // Change Original Dimentions 
     
            return FALSE;
        }   
        return CDialog::OnEraseBkgnd(pDC);
    }

  13. #13
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    j'ai modifier mon code de facon a etre le plus ressamblant à la FAQ, mais je dois quand meme faire des modifications tel que passer un HWND pour utiliser la fonction GetClientRect. Mais le problème n'est pas la car j'ai verifier que les valeurs passées à ce CRect sont correctes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void CDisplayPicture::Show(HWND _hwnd,CDC * _dc)
    {	
    	if (m_IPicture)
    	{
    	CRect rect;
    	GetClientRect(_hwnd,&rect);		
     
            UpdateSizeOnDC(_dc); // Get Picture Dimentions In Pixels 
     
            CPicture::Show(_dc, CPoint(0,0), CPoint(m_Width,m_Height), 0,0); 
    		CPicture::Show(_dc,rect); // Change Original Dimentions        
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
    {			
    	if (m_pExpPicture!=NULL)
    	{		
    		m_pExpPicture->Show(m_hWnd,pDC);
    		return FALSE;
    	}
     
    	return CFrameWnd::OnEraseBkgnd(pDC);
    }
    PS: CDisplayPicture herite de CPicture
    Pour les details, cherche tout seul !

  14. #14
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    j'ai resolu mon problème :

    j'utilisait un template document-vue et je m'obstinais a desinner dans la mainframe alors que mon DOc la recouvrait par la suite...

    Je tiens a remercier quand meme farscape pour le temps passé dans ce topic. merci
    Pour les details, cherche tout seul !

  15. #15
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    effectivement ..., si c'est ok pense a mettre résolu sur ton post (avec le bouton )

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

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. [Débutant]Problème avec les timers
    Par mickael777 dans le forum MFC
    Réponses: 1
    Dernier message: 11/04/2005, 11h00
  3. [débutant] problème avec le curseur (sablier)
    Par bat dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/12/2004, 08h26
  4. [débutant] problème avec un "if"
    Par pingoui dans le forum Langage
    Réponses: 10
    Dernier message: 11/08/2004, 09h46
  5. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28

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