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

Windows Discussion :

Rafraichissement d'image .


Sujet :

Windows

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut Rafraichissement d'image .
    Bonjour
    Je code sous visual C++ / dev C++
    J'affiche une image bmp sur une fenêtre. Mais quand je rétrécis la fenêtre et que je l'agrandis après, l'image disparaît. La même chose se produit quand une autre application passe au dessus de mon image.
    J'ai trouvè une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(WM_PAINT==uMsg)
    	afficheFond(hwnd,724,0);
    Ma question est la suivante : "Est-ce que ma façon de faire est la plus propre ou en existe t'il une autre"?
    Ou alors j'ais mal codée ma fonction qui affiche l'image.
    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
    void afficheFond(HWND hwnd,int hauteur,int longueur)
    {	
    	HDC hdc;
    	POINT pt;
    	HBITMAP hBitmap;
    	HDC hMemDC;
    	PAINTSTRUCT ps;
    	BITMAP bm;
    	hdc = BeginPaint(hwnd, &ps);
    	hBitmap = (HBITMAP) LoadImage( NULL, "menuLogo.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    	hMemDC = CreateCompatibleDC (hdc);
    	SelectObject (hMemDC, hBitmap);
    	GetObject (hBitmap, sizeof (BITMAP), &bm) ;
    	pt.x = bm.bmWidth;
    	pt.y = bm.bmHeight;
    	BitBlt (hdc, 1114, hauteur-99-10, pt.x, pt.y, hMemDC, 0, 0, SRCCOPY) ;
    	EndPaint (hwnd, &ps); 
    }

  2. #2
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Plusieurs problèmes :



    Sinon, à part ça, le code parait bon.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    Bonjour,
    - Tu devrais faire attention aux valeurs numérique en dur
    - Avec le message WM_PAINT, il doit y avoir la zone de l'écran à rafraîchir. Il faut en tenir compte, même si très souvent la zone est la zone client entière.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    C'est clippé automatiquement sur la zone à raffraichir.
    Aussi, en tenir compte n'est utile que si on a des traitements lents à faire lors de l'affichage...

    Et pour cela, je pense que le mieux est d'utiliser la fonction RectVisible().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut
    Merci pour ces présieuses informations.

    Et pour cela, je pense que le mieux est d'utiliser la fonction RectVisible().
    enfait j'utilise déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    InvalidateRect(hwnd,NULL,true);
    Mais celà ne fait que raffraichir la fenêtre où est désigné le bmp et efface se dernier.
    donc c'est pour cela que j'ai rajouté avant le switch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(WM_PAINT==uMsg)
    	afficheFond(hwnd,724,0);
    remarque que j'aurai pu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    case WM_PAINT :
    	afficheFond(hwnd,724,0);
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
    qui me semble mieux écrit
    Enfin je suis content d'avoir déjà pu économisé un tout petit peu de temps en ne rechargent pas l'image à chaque fois. Et éconnomisé de la place mémoire.

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut
    Effectivement je suis obligé de redésinner le bitmap après chaque rafraichisement de ma fenêtre.

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

Discussions similaires

  1. VBA - Excel - Probleme de rafraichissement d'images - Lenteur
    Par krhyme dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/03/2007, 12h14
  2. [Upload] Effectuer un rafraichissement des images
    Par innova dans le forum Langage
    Réponses: 9
    Dernier message: 25/01/2007, 07h55
  3. Problème de rafraichissement d'image
    Par boulde dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 21/09/2006, 19h14
  4. [Tomcat] Problème de rafraichissement d'images
    Par serwol dans le forum Tomcat et TomEE
    Réponses: 10
    Dernier message: 07/02/2006, 12h42
  5. Une ProgressBar pour un rafraichissement d'image
    Par JakeGrafton dans le forum Composants VCL
    Réponses: 8
    Dernier message: 06/01/2004, 23h21

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