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] Appel Fonction OnEraseBkgnd


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 37
    Points
    37
    Par défaut [MFC] Appel Fonction OnEraseBkgnd
    Bonjour !
    DAns le cas d'un projet MFC, on a redessiné notre fenêtre. LA procedure qui redessine la fenêtre se trouve dans la fonction OnEraseBkgnd.

    Ca fonctionne pas mal , mais lorsqu'une fenêtre se superpose sur notre fenêtre, ca va moyen faible (trouble affichage).

    Y aurait-il un moyen de rafraichir l'affichage en appelant la fonction OnEraseBkgnd ?

    Ou autre idées biensur !! ??

    THX ! :o

  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 ,
    montre d'abord ce que tu fais dans OnEraseBkgnd. ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    allé je balance tout !!

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    BOOL CFenetrePostItDlg::OnEraseBkgnd(CDC* pDC)
    {
    	if (this->blnIconise)
    	{
    		// Fixe une brosse avec la couleur de fond choisie
    		//CBrush BkClrBrush(RGB(255, 128, 128));
     
    		// Sauvegarde l’ancienne brosse.
    		//CBrush* pOldBrush = pDC->SelectObject(&BkClrBrush);
     
    		COLORREF couleurCorps;
    		for(int i = 0; i < this->OPostit->GetLargeur(); i++)
    		{
    			CPen* oldPen;
    			int n = 255-((int)((double)(((double)i)/this->OPostit->GetLargeur())*191));
    			couleurCorps = RGB(32,n,255);
    			CPen pen(PS_SOLID, 1, couleurCorps);
    			pDC->MoveTo(i,0);
    			oldPen = pDC->SelectObject(&pen);
    			pDC->LineTo(i,this->OPostit->GetHauteur());
    			pDC->SelectObject(oldPen);
    		}
    		//pDC->SelectObject(pOldBrush);// restitue l’ancienne brosse.
    	}
    	else
    	{
    		// Fixe une brosse avec la couleur de fond choisie
    		//CBrush BkClrBrush(RGB(255, 128, 128));
     
    		// Sauvegarde l’ancienne brosse.
    		//CBrush* pOldBrush = pDC->SelectObject(&BkClrBrush);
     
    		CRect rect;
    		pDC->GetClipBox(&rect);    // récupère la zone a effacer.
    		COLORREF couleurCorps, couleurReplie, couleurCoin, couleurTrait;
    		couleurReplie = RGB(32,32,160);
    		couleurCoin = RGB(0,0,0);
    		couleurTrait = RGB(0,0,0);
     
    		for(int i = 0; i < rect.Width(); i++)
    		{
    			double color;
    			CPen* oldPen;
    			int n = 255-((int)((double)(((double)i)/rect.Width())*191));
    			couleurCorps = RGB(32,n,255);
    			if ((rect.Width()-i)==40)
    			{
    				CPen pen(PS_SOLID, 1, couleurTrait);
    				pDC->MoveTo(i,0);
    				oldPen = pDC->SelectObject(&pen);
    				pDC->LineTo(i,39);
    				CPen pen2(PS_SOLID, 1, couleurCorps);
    				pDC->MoveTo(i,40);
    				oldPen = pDC->SelectObject(&pen2);
    				pDC->LineTo(i,rect.bottom);
    				pDC->SelectObject(oldPen);
    			} else if ((rect.Width()-i)<=40) {
    				int j = rect.Width()-i;
    				CPen pen(PS_SOLID, 1, couleurCoin);
    				pDC->MoveTo(i,0);
    				oldPen = pDC->SelectObject(&pen);
    				pDC->LineTo(i,40-(j+1));
    				CPen pen2(PS_SOLID, 1, couleurTrait);
    				pDC->MoveTo(i,40-j);	
    				oldPen = pDC->SelectObject(&pen2);
    				pDC->LineTo(i,40-j);
    				CPen pen3(PS_SOLID, 1, couleurReplie);
    				pDC->MoveTo(i,40-(j-1));	
    				oldPen = pDC->SelectObject(&pen3);
    				pDC->LineTo(i,39);
    				CPen pen4(PS_SOLID, 1, couleurCorps);
    				pDC->MoveTo(i,40);
    				oldPen = pDC->SelectObject(&pen4);
    				pDC->LineTo(i,rect.bottom);	
    				pDC->SelectObject(oldPen);
    			} else {
    				CPen pen(PS_SOLID, 1, couleurCorps);
    				pDC->MoveTo(i,0);
    				oldPen = pDC->SelectObject(&pen);
    				pDC->LineTo(i,rect.bottom);
    				pDC->SelectObject(oldPen);
    			}
    		}
    		//pDC->SelectObject(pOldBrush);// restitue l’ancienne brosse.
    	}
    	return TRUE;
    }

    voila les gars !

  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
    salut ,
    effectivement ça rame parce que tu dessines dedans...
    il est preferable de constituer un bitmap en memoire la premiere fois de la taille de la fenêtre de dessiner le motif global dedans.
    et apres de projeter uniquement la partie effacée ,ça sera plus rapide.
    de plus ta méthode tient compte de la largeur de la zone a repeindre pour dessiner ,a la longue le resultat doit etre bizarre...
    pour le principe un peu comme dans cet exemple dans le cas d'un TreeCtrl customisé sur le paint.
    http://c.developpez.com/faq/vc/?page...TreeCtrlCustom


  5. #5
    Membre actif Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 273
    Points
    273
    Par défaut
    Merci pour l'info !

    On ne savait pas trop quand été appelée la fonction, maintenant, c'est OK !

    Elle s'exécute en fait quand une partie de la fenêtre est achée, et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->GetClipBox(&rect);
    récupère la partie qui est cachée.

    On va pouvoir améliorer ça maintenant !

    Thx !

    Gulix, alias le binôme de Bletz
    "L'univers... on croit qu'il est infini mais quand on arrive au bout un gorille géant vous balance des tonneaux."
    Phillip J. Fry

    http://www.gulix.fr/

    BlindShark, Logiciel de Blind Test - Pull N' Bounce - Jeu XNA

Discussions similaires

  1. MFC - Appel de fonction en mode Unicode ?
    Par Erakis dans le forum MFC
    Réponses: 8
    Dernier message: 14/11/2007, 13h07
  2. MFC appel fonctions
    Par beb30 dans le forum MFC
    Réponses: 7
    Dernier message: 13/04/2006, 15h39
  3. Réponses: 7
    Dernier message: 10/10/2005, 14h31
  4. [MFC] Appel d'une dialog
    Par mac07 dans le forum MFC
    Réponses: 6
    Dernier message: 23/12/2003, 17h52
  5. Appel fonction assembleur en C
    Par grandjouff dans le forum C
    Réponses: 6
    Dernier message: 07/12/2003, 20h43

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